【发布时间】:2018-01-17 04:38:57
【问题描述】:
我想导入一个 Win32API 的外部函数。
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 处包含一个对象字段,该对象字段不正确地对齐或重叠。对象字段。”
您有什么想法可以解决这个问题或问题出在哪里?
最好的问候
编辑: 忘记提供调用方式了:
var ba = new Win32API.BLUETOOTH_ADDRESS();
ba.rgBytes = new byte[6];
【问题讨论】:
-
你知道什么是 C
union吗? -
我试着理解
标签: c# c winapi structure unions