如何从 C++/CLI 调用朴素的 C++ 函数
How to call unadorned C++ function from C++/CLI
我已经编写了一个可以从 Fortran 调用的 C++/CLI 函数。它被指定为
extern "C"
{
void __declspec(dllexport) __cdecl someFunct(int val)
{
...
}
}
这行得通;它调用托管代码,我可以从 Intel Visual Fortran 调用它。当我 dumpbin 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"。如何强制名称不加修饰?
想通了。我的规范必须以 DLL 名称开头:
using namespace System::Runtime::InteropServices;
[DllImport("DLL_with_someFunct",CallingConvention=CallingConvention::Cdecl)]
extern "C" extern void __cdecl someFunct(int val);
我已经编写了一个可以从 Fortran 调用的 C++/CLI 函数。它被指定为
extern "C"
{
void __declspec(dllexport) __cdecl someFunct(int val)
{
...
}
}
这行得通;它调用托管代码,我可以从 Intel Visual Fortran 调用它。当我 dumpbin 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"。如何强制名称不加修饰?
想通了。我的规范必须以 DLL 名称开头:
using namespace System::Runtime::InteropServices;
[DllImport("DLL_with_someFunct",CallingConvention=CallingConvention::Cdecl)]
extern "C" extern void __cdecl someFunct(int val);