C#调用C++的DLL各种问题

本文介绍了在C#程序中调用C++编译的DLL时遇到的函数找不到入口、函数名混淆及参数传递问题。通过添加_declspec(dllexport)和extern "C"来解决函数导出问题,使用ref byte类型解决字符串乱码问题,并提供了解决方案的详细步骤。
摘要由CSDN通过智能技术生成

一开始将C++的程序编译成了DLL,然后在自己的C#程序里调用这个DLL。当然要将需要用到的其他的文件和此DLL放在一起,因为C++的程序也用到了很多其他的文件。

然后就在C#中写了一个类,将用到的函数都放里面。就是重复的用DLLImport。

但是运行程序时报错,说是无法找到函数入口,先是发现在C++程序里,没有在函数外写_declspec(dllexport),这是将一个函数声名为导出函数,就是说这个函数要被包含她的程序之外的程序调用。 遂加上。加上后依然报错,在网上看到说,函数在编译后名称会改变,用DEPENDS.exe看了下,果然是这样,原来需要在_declspec(dllexport)前加上extern "C",指示编译器用C语言方法给函数命名。再运行,发现可以了。DEPENDS工具一般存放于VS的安装时的存盘目录中,...\\...\ Microsoft Visual Studio  \ Common7 \ Tools \ depends.exe,你可以用它看DLL中的函数,以及它用到的其他DLL文件,也许你的DLL不能用是因为缺少其他dll。

 

但是,有个函数的参数为指针,运行后出来的结果为乱码,原函数为

extern

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值