DllImport и хитрая структура - C#

Узнай цену своей работы

Формулировка задачи:

Подключаю в C# обычную Си-шную DLL. Встретилась функция, которая принимает на вход структуру такого вида:
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 );
Как сформировать такую структуру в C# для вызова этой функции?

Решение задачи: «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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5