读书人

dll工程里的_asm话语为什么不执行

发布时间: 2013-12-19 00:33:34 作者: rapoo

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);
}

读书人网 >C++ Builder

热点推荐