使用CPP DLL中的c#代码
using cpp dll in c# code
我试图在c#应用程序中使用本机c++ dll。
我从这篇文章开始。
它的工作很好,而dll只使用c文件(如在教程中),但当使用cpp文件我不能使它工作。
使用dumpbin工具,我可以看到我导出的函数名改变了。例如,一个函数调用'next'更改为'?next@@YAHH@Z',当我试图在c#代码中调用它时,它找不到它。
我的DLL代码是:
__declspec(dllexport)
int next(int n)
{
return n + 1;
}
c#代码
[DllImport("lib.dll", CallingConvention = CallingConvention.Cdecl)]
extern static int next(int n);
在使用c文件或CPP文件时代码相同
提前感谢Amichai
你要做的是做一个蹦床函数,来具体化你的c++对象的使用。
你所经历的被称为符号混乱。这是一种c++特有的命名动态库和可执行文件中的符号(如函数)的方式,以启用多态性。
您必须在库代码中使用extern "C"
语句来指定您想要取消混乱效果,就像这样:
extern "C" __declspec(dllexport)
int next(int n)
{
return n + 1;
}
使用dllexport
请提供入口点
下面的例子
[DllImport("lib.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "next", CharSet = CharSet.Ansi)]
static extern int next(int n);
希望有帮助。
相关文章:
- 0-1背包代码中的错误.我的代码中有什么错误
- 类没有命名C++代码中的类型错误
- 如何防止C++遗留代码中的挂起指针
- 此代码中的操作流程是什么?C/C++.
- 以下代码中的函数模板有什么问题?
- 我的代码中的意外价值以及我如何修复它
- 无法找出我的代码中的内存泄漏
- 错误:'int'之前的预期主表达式以及代码中的许多类似错误
- 如何理解此C++代码中的动态绑定?
- 此代码中的" "是什么,它的基本作用是什么?
- 如何完全关闭 TBB 代码中的线程
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- C++指针问题:如何修复这些代码中的错误?
- 如何防止使用 std::shared_ptr 的代码中的内存泄漏
- "p"数组如何使用 std::normal_distribution 存储以下代码中的值C++?
- 是给定代码中的任何更改,以便我可以为问题提供正确的输出
- 如何使用指针直接从托管代码中的非托管代码中读取矢量数据
- 删除原子多线程代码中的容器
- 如何处理给定代码中的 std::out_of_range 错误?
- 我的重复检查代码中的错误究竟在哪里?