C#调用C++dll问题总结

  1. 参考博客https://blog.csdn.net/songyi160/article/details/51075023 并增加了一些内容
  2. C#工程调用C++工程项目的dll需要注意C++中string类型作为传入接口的时候代码书写方式与常用方式有区别,书写方式如下
c++ 中 函数声明应为如下格式 不能出现string接口 或者返回类型。

extern "C" _declspec(dllexport) int _stdcall TEST_IMAGE(char *imagename,const char* result);

函数体重的变量使用方式如下:

string outmessage;

 outmessage = “testing!”

result = outmessage.c_str();

c#中书写方式如下:

[DllImport("createlprdll.dll", EntryPoint = "TEST_IMAGE", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
extern static int TEST_IMAGE(StringBuilder imagename, StringBuilder result);
static void Main(string[] args)
{
            StringBuilder imagename = new StringBuilder(1024);
            StringBuilder result = new StringBuilder(1024);
            imagename.Append("G:\\lprdll\\img2.jpg");

            int a = TEST_IMAGE(imagename,result);  

}

注意:

  • 需要用char* 不能使用string;
  • C#中使用StringBuilder并且 赋值采用函数 Append;

3.出现问题联调时需注意 如果是C++项目在release下生产的dll 相关配置属性(主要是opencv) debug也需要配置好,因为C#在debug环境下调试,跳入C++代码后,访问的是debug模式。

4.注意传出的char* 参数 在外部申请内存 ,内部就不能再申请了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值