我已经编写了一个C ++ / CLI函数,我可以从Fortran调用它。它被指定为
extern "C"
{
void __declspec(dllexport) __cdecl someFunct(int val)
{
...
}
}
这有效;它调用托管代码,我可以从英特尔Visual Fortran调用它。当我转储DLL时,我看到它被导出为_someFunct
我现在想从另一个C ++ / CLI DLL调用此函数。我已经尝试了以下规范(有和没有前导下划线),但两者都失败了:
extern "C" extern __declspec(dllimport) void __cdecl someFunct(int val);
我得到的错误信息是:
Error 4 error LNK2028: unresolved token (0A00000A) "extern "C" void __cdecl someFunct(int)" (?someFunct@@$$J0YAXH@Z) referenced in function "public: void __clrcall NUnitTesting::Class1::Test(void)" (?Test@Class1@NUnitTesting@@$$FQ$AAMXXZ)
链接器似乎需要一个装饰名称,即使我指定extern" C"在规范中。如何强制使名称变得朴实无章?
答案 0 :(得分:0)
想出来。我的规范必须以DLL的名称为准:
using namespace System::Runtime::InteropServices;
[DllImport("DLL_with_someFunct",CallingConvention=CallingConvention::Cdecl)]
extern "C" extern void __cdecl someFunct(int val);