从托管代码调用本机函数
Calling a native function from managed code
我有一个托管的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
,正如评论中建议的那样。
相关文章:
- 在这种情况下,java对象是否可以调用本机函数
- 对于第二个本机函数,显示不舒适的LinkError:未针对.stringfromjni2()找到实现
- 在使用该名称创建变量后调用本机 C 函数
- clr 如何使用本机 c++ dll 的引用'&'参数调用函数?
- 如何从 JNI 传递 std::list 参数来调用本机 C++ 函数
- NDK - 包含一个预构建的库,并在 Android 项目中调用本机函数
- 在本机C 函数内是否需要GCRoot
- 从 C# 调用本机C++函数
- Android本机C 函数呼叫导致应用程序崩溃
- 如何从VM调用本机函数
- 如何将 java 函数指针传递给 c++ 本机代码
- 括号外壳自定义本机(C++)函数未被调用
- 使用JNI从Java调用本机(C++)函数时发生访问冲突:这是我的代码问题,还是已知问题
- 当未导出成员函数时,从C#调用C++本机/非托管成员函数
- 本机线程类函数的JNI流是什么
- 通过JNI执行OpenCV本机函数的问题
- 从C#调用Advapi32.dll本机EventWrite函数
- 将成员函数从C++CLI传递到本机C回调
- 如何将 C 函数签名转换为 C# 并在本机 DLL 中调用该函数
- 如何在类中引用本机函数