从托管代码调用本机函数
Calling a native function from managed code
我有一个托管的 C++/CLI 项目,它必须使用一些本机代码。本机 header 文件的简化版本为:
struct structA
{
// Some variables...
};
struct structB
{
// Some similar variables...
void convertTo(structA& dest);
};
此 header 包含在托管代码中。托管代码有:
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) for an unreferenced function was what I should have been paying attention to. It is strange that a managed-unmanaged clash error (LNK2028) 也被抛出,因为这是一个更专业的错误(这也让我偏离了轨道)。据我所知,这个错误应该只适用于我使用 /clr:pure
,正如评论中所建议的那样。
我有一个托管的 C++/CLI 项目,它必须使用一些本机代码。本机 header 文件的简化版本为:
struct structA
{
// Some variables...
};
struct structB
{
// Some similar variables...
void convertTo(structA& dest);
};
此 header 包含在托管代码中。托管代码有:
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) for an unreferenced function was what I should have been paying attention to. It is strange that a managed-unmanaged clash error (LNK2028) 也被抛出,因为这是一个更专业的错误(这也让我偏离了轨道)。据我所知,这个错误应该只适用于我使用 /clr:pure
,正如评论中所建议的那样。