Ada メインラインで関数を呼び出すには、Visual Studio C++ DLL が必要です。Adaコードには次のような関数仕様があります
package offset is
function GET_OFFSET return integer;
pragma Export (Stdcall, GET_OFFSET, "fnAdaOffset");
end offset;
次に、C++ 関数は次のように Ada メソッドを呼び出します。
typedef int (*tdAdaOffset)(void);
tdAdaOffset _ptAdaOffset = NULL;
int AdaOffset()
{
if (_ptAdaOffset == NULL)
{
_ptAdaOffset = (tdAdaOffset)GetProcAddress(GetModuleHandle(NULL), "fnAdaOffset@0");
if (_ptAdaOffset == NULL)
throw "Function not found";
}
return (*_ptAdaOffset)();
}
これでうまくいくと思います。私が抱えている問題は、Ada が実行可能ファイルで関数 GET_OFFSET を外部としてマークすることを拒否することです。つまり、dumpbin /exports ada.exe を実行すると、エクスポートされた関数が表示されません。
--version-script for the linkerなどのさまざまなソリューションを読みましたが、私のリンカーは古すぎてこのスイッチについて知ることができません。
もう 1 つの有望なオプションは、リンク ステップに -shared を追加することでしたが、これにより関数が公開されますが、出力ファイルも DLL (拡張子が .EXE (!)) に変更されるため、これも役に立ちません。
ツールチェーンをアップグレードする前に、試すことができる別のリンカー スイッチ、またはその他の提案はありますか?