質問

私はDLLを持っています、それは関数をエクスポートします...

extern "C"
int __stdcall
MP_GetFactory( gmpi::IMpUnknown** returnInterface )
{
}

これをCode :: Blocks GCCコンパイラ(v3.4.5)でコンパイルします。問題:結果のDLLエクスポート装飾機能名...

MP_GetFactory@4

これはロードに失敗し、古いものでなければなりません...

MP_GetFactory

これを約4時間調査しました。私は、これを修正するオプションだと思います。私のコード::ブロックログショー...

mingw32-g++.exe -shared -Wl,--out-implib=binDebuglibGainGCC.a -Wl,--dll objDebugse_sdk3mp_sdk_audio.o objDebugse_sdk3mp_sdk_common.o objDebug gain gain.o obj debug gain gain.res -o bin debug gaingcc.sem -add stdcall -alias -luser32

..だからそれが正しいオプションだと思いますか?しかし、運はありません。 Dependance Walkerは、エクスポートされている装飾された名前のみを示しています。 __stdcallの代わりに__cdeclを使用して作業を受けましたが、名前は正常にエクスポートされますが、関数は呼び出されたときにスタックを破損します(発信者は他の呼び出し条約を期待しているため)。

役に立ちましたか?

解決

自分の質問に答えて申し訳ありませんが、ついにそれを理解しました。

プロジェクト/ビルドオプション/リンカー/その他のリンカーオプション-Wl、 - kill-at

...装飾「@」シンボルなどを殺します。

他のヒント

私はそれが-wlであるべきだと思います - - add-stdcall-aliasと「kill-at」トリックは、生成されたインポートライブラリファイルを使用できないようにします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top