dll工程里的_asm语句为什么不执行
C++Builder 的DLL工程,每次调用GetCPUID函数返回的uCPUID值都是0,是不是没执行_asm里的汇编语句? 该函数在C++Builder一般的工程下可以执行_asm里的语句,能返回正确的uCPUID值。顺便问下,怎么debug调试dll工程?
DWORD GetCPUID(void)
{
DWORD uCPUID = 0U; //UINT
_asm
{
mov eax, 1
cpuid
mov uCPUID, edx
}
return uCPUID;
}
// project2.dll ,use vcl
extern "C"{
__declspec(dllexport) __stdcall DWORD GetCPUID(void);
}
DWORD __stdcall GetCPUID(void)
{
DWORD uCPUID = 0U; //UINT
_asm
{
mov eax, 1
cpuid
mov uCPUID, edx
}
return uCPUID;
}
// 调用
void __fastcall TForm1::btn1Click(TObject *Sender)
{
HINSTANCE hInc = LoadLibraryA("Project2.dll");
DWORD (__stdcall *getcpuid)(void);
(FARPROC)getcpuid = GetProcAddress(hInc,"GetCPUID");
if (getcpuid)
{
AnsiString sCpuID = AnsiString().sprintf("%u", getcpuid());
ShowMessage(sCpuID); // 也是3219913727
}
FreeLibrary(hInc);
}