【发布时间】:2018-08-24 08:22:43
【问题描述】:
std::string __cpuid()
{
char VendorName[49] = {0};
char VendorID[13] = {0};
unsigned int a, b, c, d;
__asm xor EBX, EBX;
__asm xor ECX, ECX;
__asm xor EDX, EDX;
__asm mov EAX, 0x80000002;
__asm cpuid;
__asm mov a, EAX;
__asm mov b, EBX;
__asm mov c, ECX;
__asm mov d, EDX;
__asm mov DWORD PTR [VendorName + 0], EAX;
__asm mov DWORD PTR [VendorName + 4], EBX;
__asm mov DWORD PTR [VendorName + 8], ECX;
__asm mov DWORD PTR [VendorName + 12], EDX;
__asm mov EAX, 0x80000003;
__asm cpuid;
__asm mov DWORD PTR [VendorName + 16], EAX;
__asm mov DWORD PTR [VendorName + 20], EBX;
__asm mov DWORD PTR [VendorName + 24], ECX;
__asm mov DWORD PTR [VendorName + 28], EDX;
__asm mov EAX, 0x80000004;
__asm cpuid;
__asm mov DWORD PTR [VendorName + 32], EAX;
__asm mov DWORD PTR [VendorName + 36], EBX;
__asm mov DWORD PTR [VendorName + 40], ECX;
__asm mov DWORD PTR [VendorName + 44], EDX;
__asm mov EAX, 0x00000000;
__asm cpuid;
__asm mov DWORD PTR [VendorID + 0], EBX;
__asm mov DWORD PTR [VendorID + 4], EDX;
__asm mov DWORD PTR [VendorID + 8], ECX;
__asm mov EAX, 0x80000004;
strcat(VendorName, " ");
strcat(VendorName, VendorID);
return string(VendorName);
}
先生们,如何在 ffilua 中使用它?我的ffi不好
我尝试使用 ffi.cdef,但编译器问我:声明说明符应在 'std' 附近
我尝试了很多东西,但我很菜鸟
【问题讨论】:
-
什么 FFI?你在使用 LuaJIT 吗?在那种情况下,这根本不是 FFI 的工作方式。您应该编写您的 C 函数 in C 并将它们编译为动态库。 FFI 只允许您以简单的方式访问库中的那些函数,但您不能编写新代码。
-
将该代码放入
.c文件中,删除 C++ 特定内容,通过您选择的编译器提供它(CGG 始终是一个很好的建议),并确保查看如何告诉它你想要一个动态库,而不是一个可执行程序。如果您对此有任何疑问,请随时提出。 -
还要确保准确地解释您的问题是什么以及您尝试过什么。确切的 Lua 版本(5.1、5.3、LuaJIT 等)非常有用,因为答案可能因版本而异。