DllImport и хитрая структура - C#
Формулировка задачи:
Подключаю в C# обычную Си-шную DLL. Встретилась функция, которая принимает на вход структуру такого вида:
Как сформировать такую структуру в C# для вызова этой функции?
typedef struct _WIN32_COMMAND {
union {
ULONG mFunction;
NTSTATUS mStatus;
};
ULONG mLength;
union {
mUSB_SETUP_PKT mSetupPkt;
UCHAR mBuffer[ LENGTH ];
};
} mWIN32_COMMAND, *mPWIN32_COMMAND;
typedef struct _USB_SETUP_PKT {
UCHAR mUspReqType;
UCHAR mUspRequest;
union {
struct {
UCHAR mUspValueLow;
UCHAR mUspValueHigh;
};
USHORT mUspValue;
};
union {
struct {
UCHAR mUspIndexLow;
UCHAR mUspIndexHigh;
};
USHORT mUspIndex;
};
USHORT mLength;
} mUSB_SETUP_PKT, *mPUSB_SETUP_PKT;
ULONG WINAPI DriverCommand( ULONG iIndex, mPWIN32_COMMAND ioCommand );Решение задачи: «DllImport и хитрая структура»
textual
Листинг программы
[StructLayout(LayoutKind.Explicit, Size=размер)]
struct _WIN32_COMMAND
{
[FieldOffset(0)] public uint mFunction;
[FieldOffset(0)] public uint mStatus;
[FieldOffset(4)] public uint mLength;
[FieldOffset(8)] mUSB_SETUP_PKT mSetupPkt;
[FieldOffset(8), MarshalAs(UnmanagedType.ByValArray, SizeConst = LENGTH)] public byte[] mBuffer;
}