我想導入Win32API的extern函數。使用Win32API:結構內的聯合生成TypeLoadException
守則從API(C語言)看起來是這樣的:
typedef struct _BLUETOOTH_ADDRESS {
union {
BTH_ADDR ullLong;
BYTE rgBytes[6];
};
} BLUETOOTH_ADDRESS;
我的C#實現是這樣的:
[StructLayout(LayoutKind.Explicit, Size = 8)]
public struct BLUETOOTH_ADDRESS
{
[FieldOffset(0)]
public ulong ullLong;
[FieldOffset(2)]
public byte[] rgBytes;
};
的問題是:當我創建的結構,它會拋出一個TypeLoadException,錯誤代碼: System.TypeLoadException:「無法從程序集'BleLab,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'加載類型'BLUETOOTH_ADDRESS',因爲它包含偏移量爲2的對象字段這是不正確對齊或覆蓋d通過非對象字段。「
你有什麼想法解決這個問題或問題在哪裏?
問候
編輯: 忘了提供調用的方式:
var ba = new Win32API.BLUETOOTH_ADDRESS();
ba.rgBytes = new byte[6];
你知道什麼是C'union嗎? – alk
我試圖理解 – IceTrailer