在XP 32位這條線與不問題編譯然而在Vista中的64位這一行:stdcall over-ride by visual studio?
m_FuncAddr = ::GetProcAddress (somthing);
提供了以下錯誤
錯誤C2440: '=':不能從 'FARPROC' 轉換'INT(__cdecl *)(無效)'
GetProcAddress的被定義爲
WINBASEAPI FARPROC WINAPI GetProcAddress (somthing)
而且m_FuncAddr作爲
int (WINAPI *m_FuncAddr)();
從我的理解都是STDCALL的。
爲了避免我有錯誤把
m_FuncAddr = (int (__cdecl *)(void))::GetProcAddress(somthing);
我的問題:
如果m_FuncAddr和GetProcAddress都有stdcall調用爲什麼我要「召回」它的cdecl?
是否有可能VS項目設置的默認調用約定(設置爲cdecl)超過了上面的assignemet語句?
在此先感謝!
[編輯]
要clerfiy問題:
在等式的一側(說側1)我有
int __stdcall * m_FuncAddr
在另一側(側2)
INT_PTR far __stdcall GetProcAddress
那麼,如果兩個都是stdcalls,那麼我怎麼才能用cdecl來拋出第二面呢? 或者我沒有得到什麼?
我的回答依然矗立你的編輯,詮釋後INT_PTR在64位建立很大的不同! – 2008-10-17 01:53:19
如果您只查看「回覆」標籤,請參閱下面的編輯。 – 2008-10-21 01:04:11