C++的函数参数列表中包含一个char*的输出型参数,然而在C#调用该dll时候,会自动将函数的中的char*参数“翻译”为sbyte*, 使用了各种方法都不能调用函数,主要是不能合适的转换为sbyte*。
1、【项目】->【属性】->【生成】->勾选 【允许不安全代码】
2、引入头文件 using System.Runtime.InteropServices;
3、
string videoName = "ComplexBkg1.avi";
unsafe {
IntPtr intPtrStr = (IntPtr)Marshal.StringToHGlobalAnsi(videoName);
sbyte* sbyteStr = (sbyte*)intPtrStr;
temp.fishTracking(sbyteStr);
}
本文解决C#调用C++DLL时char*参数自动转换为sbyte*的问题,通过允许不安全代码、使用System.Runtime.InteropServices命名空间及手动转换指针类型的方法,成功调用输出型char*参数。

2044

被折叠的 条评论
为什么被折叠?



