资源描述:
《c#调用c++编写的dll函数各种参数传递问题》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、C#调用C++编写的DLL函数各种参数传递问题C#调用C++编写的DLL函数各种参数传递问题 1.不返回值的参数 C++原型: boolSendNewSms(char*szTel,char*szMessage); C#引用; [DllImport("CdmaCard.dll",EntryPoint="SendNewSms")] publicstaticexternboolSendNewSms(stringphone,stringmsg); 2.带返回值(char*) C++原型: BOO
2、LGetCardErrorMessage(char*szErrorMessage,interrorCode); C#引用 [DllImport("CdmaCard.dll",EntryPoint="GetCardErrorMessage")] publicstaticexternintGetCardErrorMessage(StringBuildermsg,interrorCode); StringBuilderbuf=newStringBuilder(1024);//指定的Buf大小必须大于可能
3、的最大长度 GetCardErrorMessage(buf,1); 3.带返回值(其他类型) C++原型: BOOLGetSmsSaveStation(int*nSmsStation); C#引用 [DllImport("CdmaCard.dll",EntryPoint="GetSmsSaveStation")] publicstaticexternboolGetSmsSaveStation(refintnStation); 4.传递结构体指针(C++填充) C++原型: struct
4、NET_INFO_STRUCT { DWORDnDurationTime;//持续时间 doublenReceiveByte;//接收字节 doublenSendByte;//发送字节 }; BOOLNetGetConnectDetail(NET_INFO_STRUCT*lpNetInfo); C#引用 publicstructNET_INFO_STRUCT { publicuintnDurationTime;//持续时间 publicdoublenReceiveByte;//接收字
5、节 publicdoublenSendByte;//发送字节 } [DllImport("CdmaCard.dll",EntryPoint="NetGetConnectDetail")] publicstaticexternintNetGetConnectDetail(refNET_INFO_STRUCTpNetInfo); NET_INFO_STRUCTnetInfo=newNET_INFO_STRUCT(); NetGetConnectDetail(refnetInfo); 5.传递结构
6、体数组(C++来填充) C++原型: structUIM_BOOK_STRUCT { intUimIndex; charszName[15]; charszPhone[21]; }; intReadUimAllBook(UIM_BOOK_STRUCTlpUimBookItem[],intnMaxArraySize); C#引用 [StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]//可以指定编码类型 publicstru
7、ctUIM_BOOK_STRUCT { publicintUimIndex; [MarshalAs(UnmanagedType.ByValTStr,SizeConst=15)] publicstringszName; [MarshalAs(UnmanagedType.ByValTStr,SizeConst=21)] publicstringszPhone; }; [DllImport("CdmaCard.dll",EntryPoint="ReadUimAllBook")] publics
8、taticexternintReadUimAllBook([Out]UIM_BOOK_STRUCT[]lpUimBookItem,intnMaxArraySize); UIM_BOOK_STRUCT[]p=newUIM_BOOK_STRUCT[20]; intret=ReadUimAllBook(p,p.Length); 6.注意问题 类型不一致,会导致调用失败, (1)long类型,在C++中是4字节的整数,在C#