csharp调用c++的dll中带有各种char*,void* 50

问题一:c++的dll中接口是intQISRAudioWrite(constchar*sessionID,constvoid*waveData,unsignedintwa... 问题一:
c++的dll中接口是
int QISRAudioWrite(const char* sessionID, const void* waveData, unsigned int waveLen, int audioStatus, int *epStatus, int *recogStatus);
我在C#中调用的是:
[DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
public static extern int QISRAudioWrite(string sessionID, ref byte waveData, uint waveLen, AudioStatus audioStatus, ref EpStatus epStatus, ref RecogStatus recogStatus);
调试时返回错误“无效的句柄”,c#中应该怎么定义这个sessionID,用string吗?还有这个void*类型的waveData,由于waveData这个地方需要给一个音频文件的byte数组的起始元素的地址,所以我就用ref byte了,应该就这2个地方会有错误,后面4个都是int或者ref int,应该没有什么问题
问题二:
c++的dll中接口是
const char* QISRSessionBegin(const char* grammarList, const char* params, int* errorCode);
在C#中调用是
public static extern IntPtr QTTSSessionBegin(string grammar, string _params, ref int errorCode);
sessionId = QTTSSessionBegin(null,param, ref errCode);
结果调试的时候报错说不匹配,是不是string类型的不能用null啊?然后我将第一个string grammar去掉,只留后面2个参数,居然没有错了,奇怪

初学C#,各种不懂,还请大神不吝赐教,感激涕零^||^ !!!!!!!!!
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏50(财富值+成长值)
xtwgigu2
2015-10-15 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:54
采纳率:0%
帮助的人:76.6万
展开全部
对于c++的char*参数,c#调用的时候要指定下是ASCI的还是unicode的。
C#调用时加上CharSet = CharSet.Ansi.
char用CharSetansi, wchar的话用CharSet.unicode.
更多追问追答
追问
那么在C#中应该用什么类型去与那个char*类型匹配呢?string、byte[]、还是什么其他类型?
追答
string.
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式