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* 参数 在外部申请内存 ,内部就不能再申请了!

你可能感兴趣的:(交叉编译)