首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

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

2013-12-19 
dll工程里的_asm语句为什么不执行C++Builder 的DLL工程,每次调用GetCPUID函数返回的uCPUID值都是0,是不是

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

热点排行