我需要一个能够在我的 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,但我的链接器似乎太旧了,无法了解此开关。
另一个有希望的选项是将 -shared 添加到链接步骤,但是虽然现在这会公开功能,但它也会将输出文件更改为 DLL(以 .EXE 作为其扩展名(!)),所以这也没有用。
在我升级我的工具链之前,我是否可以尝试另一个链接器开关,或任何其他建议?