如何从C ++ / CLI

时间:2016-04-22 18:15:12

标签: linker c++-cli

我已经编写了一个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"在规范中。如何强制使名称变得朴实无章?

1 个答案:

答案 0 :(得分:0)

想出来。我的规范必须以DLL的名称为准:

using namespace System::Runtime::InteropServices;

[DllImport("DLL_with_someFunct",CallingConvention=CallingConvention::Cdecl)]
extern "C" extern void __cdecl someFunct(int val);