从托管代码调用本机函数

时间:2015-01-20 08:34:47

标签: c++ c++-cli

我有一个托管的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"声明来解决这个问题(或者我使用错误)。我在这里尝试了几个解决类似问题的解决方案,但没有用。

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

1 个答案:

答案 0 :(得分:1)

原来这不是托管非托管冲突问题。我只是忘了将used函数声明为export,即。,

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

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