问题描述
C++函数原型intGetConversationPeer(TIMConversationHandleconv_handle,char*buf,uint32_t*len);C++调用方式:constuint32_tMAX_LEN=20;charbuf[MAX_LEN]={0};uint32_tlen=MAX_LEN;GetConversationPeer(conv,buf,&len);printf("theidentifieris%sn",buf);C++中能成功取出buf的数据现在要转换成NET版本Pinvoke[DllImport(dllName,EntryPoint="GetConversationPeer",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]publicstaticexternintGetConversationPeer(IntPtrconv_handle,[In,Out]char[]buf,refUInt32len);NET调用方式:constUInt32MAX_LEN=20;UInt32len=MAX_LEN;char[]buf003=newchar[20];IMSDK.GetConversationPeer(conv1,buf003,reflen);但是buf003里面并没有被赋值请问,应该怎么样才能在NET中取出buf003数据呢
解决方案
解决方案二:
char*一般用stringbuilder来替换stringbuilder必须要按照buffer长度先进行初始化如果还不行试一下CallingConvention=CallingConvention.Cdecl改为CallConvention.Stdcall试下
解决方案三:
NET函数原型[DllImport(dllName,EntryPoint="GetConversationPeer",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]publicstaticexternintGetConversationPeer(IntPtrconv_handle,StringBuilderbuf,refUInt32len);使用方式:constUInt32MAX_LEN=1000;UInt32len=MAX_LEN;StringBuilderbuf001=newStringBuilder(1000);IMSDK.GetConversationPeer(conv1,buf001,reflen);buf001还是没有数据的调用约定就是Cdecl
解决方案四:
那len等于几?
解决方案五:
出来之后,len=0
解决方案六:
这是个out参数吧IMSDK.GetConversationPeer(conv1,outbuf003,reflen);
解决方案七:
引用2楼lpsswan的回复:
NET函数原型[DllImport(dllName,EntryPoint="GetConversationPeer",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]publicstaticexternintGetConversationPeer(IntPtrconv_handle,StringBuilderbuf,refUInt32len);使用方式:constUInt32MAX_LEN=1000;UInt32len=MAX_LEN;StringBuilderbuf001=newStringBuilder(1000);IMSDK.GetConversationPeer(conv1,buf001,reflen);buf001还是没有数据的调用约定就是Cdecl
函数调用返回值是多少?