有关.net的P/Invoke操作也算了解,但说不上太深,基本的函数调用还可以,但对于一些复杂的数据结构,如上面代码中的联合(union)就无法把其转换为C#以使用的结构。
注:已经看过《如何在C#中模拟C++的联合(Union)》
http://www.cnblogs.com/allenlooplee/archive/2004/12/25/81917
此联合是Windows CE中调用RIL接口接收短信时,短信的数据结构
代码如下,也可以参考MSDN,更清楚:
MSDN:http://msdn.microsoft.com/en-us/library/aa919458.aspx
代码:
typedef struct {
DWORD cbSize;
DWORD dwParams;
RILADDRESS raSvcCtrAddress;
DWORD dwType;
DWORD dwFlags;
UNION {
struct {
RILADDRESS raOrigAddress;
DWORD dwProtocolID;
RILMSGDCS rmdDataCoding;
SYSTEMTIME stSCReceiveTime;
DWORD cbHdrLength;
DWORD cchMsgLength;
BYTE rgbHdr[MAXLENGTH_HDR];
BYTE rgbMsg[MAXLENGTH_MSG];
} msgInDeliver;
struct {
DWORD dwTgtMsgReference;
RILADDRESS raTgtRecipAddress;
SYSTEMTIME stTgtSCReceiveTime;
SYSTEMTIME stTgtDischargeTime;
DWORD dwTgtDlvStatus;
DWORD dwProtocolID;
RILMSGDCS rmdDataCoding;
DWORD cbHdrLength;
DWORD cchMsgLength;
BYTE rgbHdr[MAXLENGTH_HDR];
BYTE rgbMsg[MAXLENGTH_MSG];
} msgInStatus;
struct {
RILADDRESS raDestAddress;
DWORD dwProtocolID;
RILMSGDCS rmdDataCoding;
DWORD dwVPFormat;
SYSTEMTIME stVP;
DWORD cbHdrLength;
DWORD cchMsgLength;
BYTE rgbHdr[MAXLENGTH_HDR];
BYTE rgbMsg[MAXLENGTH_MSG];
} msgOutSubmit;