呼び出し規約を次のように指定するアプリケーション (fyi: mIRC) で動作するように、dll の簡単なテスト関数をエクスポートしようとしていました。
int __stdcall test_func(HWND mWnd, HWND aWnd, char *data, char *parms, BOOL show, BOOL nopause)
アプリケーションからこれを呼び出すには、test_funcを使用しますが、名前マングリングのために、思ったほど単純ではないことに気付きました。
ここでの同様のトピックを通じて、extern "C"を__declspec(dllexport)と組み合わせて使用することは、モジュール定義 (.def) へのマングリングを削除する同等の (ある程度) 方法であることがわかりました。ただし、extern/dllexport メソッドを使用する場合、私の関数 (例として) は常に_test_func@numbers ですが、.def は、エクスポートする必要のあるアプリケーションで使用するために必要なすべてのマングリングを削除しました。
誰かがこれがなぜなのか説明してもらえますか? 私は2つの方法に興味があります。ありがとう!