我將c/C++結構轉換爲C#標準。從C++到C#的結構轉換問題.Net Compact Framework
C/C++結構:
typedef struct _sta_conn_info{
STA_CONNECT_STATE connect_state;//Enum
STA_ASSOC_STATE assoc_state;//Enum
unsigned char bssid[6];
unsigned char ssid[34];
unsigned long channel;
enum mode mode;//Enum
unsigned long signalStrength;
unsigned long noiseLevel;
STA_AUTH_ALG auth_alg;//enum
STA_ENCRYPT_ALG encrypt_alg;//enum
}STA_CONN_INFO;
typedef struct _NDISUIO_QUERY_OID
{
NDIS_OID Oid;
PTCHAR ptcDeviceName;
UCHAR Data[sizeof(ULONG)];
} NDISUIO_QUERY_OID, *PNDISUIO_QUERY_OID;
各個C#的結構:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct _sta_conn_info
{
public _sta_connect_state connect_state;
public _sta_assoc_state assoc_state;
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 6)]
public char[] bssid ;//= new char[6];
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 34)]
public char[] ssid ;//= new char[34]
public uint channel;
public mode mode;
public uint signalStrength;
public uint noiseLevel;
public _sta_auth_alg auth_alg;
public _sta_encrypt_alg encrypt_alg;
}
QUERY STRUCT:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct _NDISUIO_QUERY_OID
{
public uint Oid;
[MarshalAs(UnmanagedType.LPWStr)]
public string ptcDeviceName;
public byte[] Data;
};
我使用此>>>reference
Marshal.SizeOf()
在WIN CE工作轉換的數據類型。我測試了它。
如果我的結構轉換很好,那麼肯定Marshal.SizeOf()
將工作來獲取結構的大小,但它會拋出異常並在DeviceIoControl()API中返回error code 87
。
任何人都可以澄清我的轉換,並讓我知道如果我做錯了什麼。
先生.. 數組轉換是有用的, 先生如何初始化這些數組? 我們可以有新的byte [size];但我在哪裏可以初始化代碼? 或者我們可以維護任何構造函數嗎? 沒有初始化數組'Marshal.Sizeof()'拋出異常。 在C/C++中我們有這個靈活性 'unsigned char bssid [6]; ' – arya2arya
你當然可以使用構造函數。或者返回結構的新實例的靜態方法。 –
爵士 [這QN將介紹我的完整任務(http://stackoverflow.com/questions/22639086/issues-in-conversion-of-code-from-c-to-c-sharp-to-實現所需任務) – arya2arya