从托管代码调用本机函数

Calling a native function from managed code

本文关键字:函数 本机 调用 托管代码      更新时间:2023-10-16

我有一个托管的C++/CLI项目,它必须使用一些本机代码。本机头文件的简化版本为:

struct structA
{
   // Some variables...
};
struct structB
{
   // Some similar variables...
   void convertTo(structA& dest);
};

此标头包含在托管代码中。托管代码具有:

structA sA;
structB sB;
// Load data into sB...
sB.convertTo(sA);

我正在使用Visual Studio 2008并使用/clr编译托管代码。这当然会生成链接器错误 (LNK2028),因为隐式调用约定不同。但是我一直无法使用extern "C"声明来解决此问题(或者我可能使用错误)。我已经尝试了为类似问题提供的几种解决方案,但无济于事。

如何从托管代码正确调用非托管函数?这里需要什么声明或包装器?

事实证明,

这不是一个托管-非托管冲突问题。我只是忘记将使用的函数声明为导出,即

__declspec(dllexport) void convertTo(structA& dest);

未引用函数的第二个更一般的链接器错误 (LNK2019) 是我应该注意的。奇怪的是,还抛出了托管-非托管冲突错误 (LNK2028),因为这是一个更专业的错误(这也让我偏离了轨道)。据我所知,这个错误应该只适用于我使用 /clr:pure ,正如评论中建议的那样。