2

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 (!)) に変更されるため、これも役に立ちません。

ツールチェーンをアップグレードする前に、試すことができる別のリンカー スイッチ、またはその他の提案はありますか?

4

1 に答える 1