私はdllを持っています、それは関数をエクスポートします...
extern "C"
int __stdcall
MP_GetFactory( gmpi::IMpUnknown** returnInterface )
{
}
これを Code::Blocks GCC コンパイラ (V3.4.5) でコンパイルします。問題: 結果の dll エクスポートは、装飾された関数名を...
MP_GetFactory@4
これはロードに失敗します。普通の古いはずです...
MP_GetFactory
私はこれを約4時間調査しました。--add-stdcall-alias はこれを修正するオプションだと思います。My Code::Blocks ログが表示されます...
mingw32-g++.exe -shared -Wl,--out-implib=bin\Debug\libGainGCC.a -Wl,--dll obj\Debug\se_sdk3\mp_sdk_audio.o obj\Debug\se_sdk3\mp_sdk_common.o obj\Debug \Gain\Gain.o obj\Debug\Gain\gain.res -o bin\Debug\GainGCC.sem --add-stdcall-alias -luser32
..だから、それが正しい選択肢だと思いますか?しかし、運がありません。Dependancy Walker は、エクスポートされている装飾された名前のみを表示します。__stdcall の代わりに __cdecl を使用してちょっとした作業を行いました。その後、名前は正常にエクスポートされますが、関数が呼び出されるとスタックが破損します (呼び出し元が他の呼び出し規則を予期していたため)。