C# 调用 C++ dll string 数据类型匹配问题 求高手搭救 100

C++中的函数原型为:intInitScreenLib(intiRow,intiCol,stringsCom,intiProtocol)C#调用:[DllImport(x... C++ 中的函数原型为:int InitScreenLib(int iRow, int iCol, string sCom, intiProtocol)

C#调用:
[DllImport(xxx.dll)]
public static extern int InitScreenLib(int iRow, int iCol, ?? sCom, int iProtocol);
请问第三个参数应该写什么数据类型?? 试过了string 和 StringBuilder 都不行
sCom 在C++ 里边就是以 string 类型定义的 不是char *
展开
 我来答
cdinten
2014-07-24 · TA获得超过6588个赞
知道大有可为答主
回答量:3562
采纳率:56%
帮助的人:1290万
展开全部
应该是String,不过你在调用的时候可以加上调用约定试试?
[DllImport("xxx.dll", CharSet = CharSet.Ansi)]
public static extern int InitScreenLib(int iRow, int iCol, string sCom, int iProtocol);
还有你说的不行是什么情况?是调用失败,还是显示的结果不正常?
追问
调用失败  程序死在里边了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
time棉花糖
2014-07-24 · 超过34用户采纳过TA的回答
知道答主
回答量:203
采纳率:0%
帮助的人:88.2万
展开全部
还是string啊
追问
不是string
追答
看看你C++的代码 ,可能C++里返回的是char*,让他返回WCHAR*
参考一下:http://blog.csdn.net/caowei880123/article/details/6387839
http://blog.csdn.net/shilogic/article/details/7027360

C#调用C++的DLL时,参数传递便成了一个问题。今天我碰到的一个问题是,在C++中导出的函数的参数是string类型的,在C#中通过string的参数调用时,便会出现该内存已损坏或不能读取的异常信息。后来我把C++的导出函数的参数由string改为LPTSTR类型,也即char*类型,然后在C#中对应的参数改为StringBuilder类型,既解决了传进去的参数问题,又解决了传出参数的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式