当前位置: 代码迷 >> VC >> 200分c#模拟c++中的联合
  详细解决方案

200分c#模拟c++中的联合

热度:6537   发布时间:2013-02-25 00:00:00.0
200分求助:c#模拟c++中的联合
有关.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;
  相关解决方案