2013-04-18 108 views
0

我最近想要將32位C++項目轉換爲64位,但我堅持第一次嘗試。在VS中將32位C++轉換爲64位(如將32位Delphi轉換爲64位)時,您能否指出任何建議/檢查列表/要點?32位C++到使用Visual Studio 2010的64位C++

int GetVendorID_0(char *pVendorID,int iLen) 
{ 
#ifdef WIN64 // why WIN64 is not defined switching to Active (x64) ? 
    // what to put here? 
#else 
    DWORD dwA,dwB,dwC,dwD; 
    __asm 
    { 
     PUSHAD 
     MOV  EAX,0 
     CPUID //CPUID(EAX=0), 
     MOV  dwA,EAX 
     MOV  dwC,ECX 
     MOV  dwD,EDX 
     MOV  dwB,EBX 
     POPAD 
    } 
    memset(pVendorID,  0,iLen); 
    memcpy(pVendorID,  &dwB,4); 
    memcpy(&pVendorID[4], &dwD,4); 
    memcpy(&pVendorID[8], &dwC,4); 
    return dwA; 
#endif 
} 
+5

AFAIK MS的x64編譯器不支持使用內聯彙編程序。 –

回答

3

微軟的編譯器(他們中的一些,反正)有一個標誌,指出至少有一些共同的問題,其中的代碼可能會需要修改爲64位代碼的工作。

至於你GetVendorID_0功能發生,我會使用微軟的_cpuid功能,這樣的事情:

int GetVendorID_0(char *pVendorID, int iLen) { 
    DWORD data[4]; 

    _cpuid(0, data); 
    memcpy(pVendorID, data+1, 12); 
    return data[0]; 
} 

這顯然不能取代的內聯彙編語言的所有實例。你的選擇相當簡單(雖然不一定容易)。一個是找到這樣的內在來完成這項工作。另一個是將彙編代碼移入單獨的文件並將其與C++中的代碼鏈接(並學習x64調用約定)。第三種方法是簡單地放棄你現在正在做的事情,並用更多的可移植代碼編寫最接近的代碼。

相關問題