2015-06-29 154 views
1

我正在使用VS 2008.我在32位編譯器中編譯我的C++代碼。我正在使用DialogBoxParam創建一個GUI並且它的工作正常。但是相同的代碼在64位編譯器中編譯,我得到的錯誤是C2664: 'DialogBoxParamA' : cannot convert parameter 4 from 'BOOL (__cdecl *)(HWND,UINT,WPARAM,LPARAM)' to 'DLGPROC'。請幫助我將C++代碼從32位轉換爲64位

+0

我已經做出了這些更改。仍然我得到相同的錯誤 –

+0

如果「這些更改」是指特定的答案,請將評論添加到該答案,而不是問題。我認爲你指的是約阿希姆的回答,如果你真的應用了他的改變,顯然你不會得到完全相同的答案。 – MSalters

+0

是的,我提到Joachim的回答,我沒有得到任何解決方案 –

回答

1

由於您正在32位機器上編譯,因此轉移到64位機器的常見問題是32位平臺上的long和int都是32位,而long是64位平臺上的64位和int是32位。如果您正在使用指針引用或字節操作,則可能會在調用函數時造成困難。

您需要檢查涉及的實際處理。

6

如果您檢查例如this DLGPROC reference你會看到它應該返回INT_PTR而不是BOOL

問題來自於BOOLint的類型別名,它在使用Visual Studio編譯器的32位和64位平臺上都是32位。另一方面,INT_PTR在64位系統上爲64位,這使得您在返回類型中不匹配。

更改爲正確的INT_PTR返回類型對話框功能的,它應該在 32位和64位系統上運行。