资源描述:
《C#调用非托管代码时参考(整理)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.不返回值的参数C++原型:bool SendNewSms(char*szTel,char*szMessage);C#引用;[DllImport("CdmaCard.dll",EntryPoint="SendNewSms")]public static extern boolSendNewSms(stringphone,stringmsg);2.带返回值(char*)C++原型:BOOLGetCardErrorMessage(char*szErrorMessage,interror
2、Code);C#引用[DllImport("CdmaCard.dll",EntryPoint="GetCardErrorMessage")] public static extern intGetCardErrorMessage(StringBuildermsg,interrorCode);StringBuilderbuf=newStringBuilder(1024);//指定的Buf大小必须大于可能的最大长度 GetCardErrorMessage(buf,1);3.带
3、返回值(其他类型)C++原型: BOOLGetSmsSaveStation(int*nSmsStation);C#引用 [DllImport("CdmaCard.dll",EntryPoint="GetSmsSaveStation")] public static extern boolGetSmsSaveStation(refintnStation);4.传递结构体指针(C++填充)C++原型:structNET_INFO_STRUCT{ DWORDnDurationTime;//
4、持续时间 doublenReceiveByte;//接收字节 doublenSendByte; //发送字节}; BOOLNetGetConnectDetail(NET_INFO_STRUCT*lpNetInfo);C#引用 publicstructNET_INFO_STRUCT{ publicuintnDurationTime;//持续时间 publicdoublenReceiveByte;//接收字节 publicdoublenSendByte; //发送字节}[DllImpo
5、rt("CdmaCard.dll",EntryPoint="NetGetConnectDetail")] public static extern intNetGetConnectDetail(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)]//可以指定编码类型publicstructUIM_BOOK_STRUCT
7、{ publicintUimIndex; [MarshalAs(UnmanagedType.ByValTStr,SizeConst=15)] publicstringszName; [MarshalAs(UnmanagedType.ByValTStr,SizeConst=21)] publicstringszPhone;};[DllImport("CdmaCard.dll",EntryPoint="ReadUimAllBook")]public static extern intRe
8、adUimAllBook([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#中是8字节的整数;(2)字符串类型的设置不正确; 以下是几个简单的