xp 32ビットでは、この行は問題なくコンパイルされますが、vista 64ビットでは、この行は次のようになります。
m_FuncAddr = ::GetProcAddress (somthing);
次のエラーが発生します
エラーC2440:'=':'FARPROC'から'int(__cdecl *)(void)'に変換できません
GetProcAddressは次のように定義されます
WINBASEAPI FARPROC WINAPI GetProcAddress (somthing)
そしてm_FuncAddras
int (WINAPI *m_FuncAddr)();
私が理解していることから、両方ともstdcallのものです。
エラーを避けるために私は入れなければなりませんでした
m_FuncAddr = (int (__cdecl *)(void))::GetProcAddress(somthing);
私の質問:
m_FuncAddrとGetProcAddressの両方にstdcall呼び出し規約がある場合、なぜcdeclで「呼び出す」必要があるのですか?
VSプロジェクト設定のデフォルトの呼び出し規約(cdeclに設定されている)が上記の割り当てステートメントを上書きする可能性はありますか?
前もって感謝します!
[編集]
質問を明確にするために:
方程式の片側(たとえば側1)に私は
int __stdcall * m_FuncAddr
反対側(サイド2)
INT_PTR far __stdcall GetProcAddress
では、両方がstdcallである場合、サイド2をcdeclでキャストする必要があるのはどうしてですか?それとも私は何かを得ていませんか?