C#调用C++的dll,C#中的类型为string[],C++中的类型为char**,怎样把C#中的string[]传到C++中的char**? .NetC++ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一感觉肯定也是你那样写,如果报错了,很可能是char* metDetail[] 是一个char类型的指针数组,所以用IntPtr[]应该可以然后用Marsharl.PtrToString()取值不过,也可以试试[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] string[] arrMetDetail, extern "C" __declspec(dllexport) void CalIsolatedSpan(char const *guideWire, char const *splitNumber, char const *isoSpan, char const *metDetail[], int nCount, char const * &result) [DllImport(dllPath, EntryPoint = "CalIsolatedSpan", CallingConvention = CallingConvention.Cdecl)] private static extern UInt32 CalIsolatedSpan_([In, MarshalAs(UnmanagedType.LPStr)]string isoSpan, [In, MarshalAs(UnmanagedType.LPStr)]string guideWire, [In, MarshalAs(UnmanagedType.LPStr)]string splitNumber, [In, MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPStr)]string[] arrMetDetail, int nCount, [Out, MarshalAs(UnmanagedType.LPStr)]out string result);需要注意的是 result 返回值需要在非托管内存分配,此时不可以使用 new 或者 malloc 之类的 C 和 C++ 的分配函数。必须使用系统的分配函数。建议最好使用由 Caller 来分配空间的做法,添加一个参数表示 result 缓冲区的大小,然后再 C# 端使用 StringBuilder。 【C# winform求救高手】控制打印机打印 sql windows服务cmd程序拒绝访问 c#操作dhcp服务器 将树结构转换成xml文件 winform 与 web 交互问题 C#连接sql,登陆失败 如何执行TextBox中输入的一条语句? 我在Web窗体添加了一个Dropdownlist,为什么在开发环境中和运行起来在IE中看的外观是不一样的?奇怪! 知道了DataRow, 如何知道该DataRow在BindingContext中的Position? winfrom 绘制个扇形pictureBox自定义组件类 c# 调用存储过程 不能获取返回值
然后用Marsharl.PtrToString()取值不过,也可以试试
[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] string[] arrMetDetail,
private static extern UInt32 CalIsolatedSpan_([In, MarshalAs(UnmanagedType.LPStr)]string isoSpan, [In, MarshalAs(UnmanagedType.LPStr)]string guideWire, [In, MarshalAs(UnmanagedType.LPStr)]string splitNumber, [In, MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPStr)]string[] arrMetDetail, int nCount, [Out, MarshalAs(UnmanagedType.LPStr)]out string result);需要注意的是 result 返回值需要在非托管内存分配,此时不可以使用 new 或者 malloc 之类的 C 和 C++ 的分配函数。必须使用系统的分配函数。建议最好使用由 Caller 来分配空间的做法,添加一个参数表示 result 缓冲区的大小,然后再 C# 端使用 StringBuilder。