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

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

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

Подключаю в C# обычную Си-шную DLL. Встретилась функция, которая принимает на вход структуру такого вида:
Листинг программы
  1. typedef struct _WIN32_COMMAND {
  2. union {
  3. ULONG mFunction;
  4. NTSTATUS mStatus;
  5. };
  6. ULONG mLength;
  7. union {
  8. mUSB_SETUP_PKT mSetupPkt;
  9. UCHAR mBuffer[ LENGTH ];
  10. };
  11. } mWIN32_COMMAND, *mPWIN32_COMMAND;
  12. typedef struct _USB_SETUP_PKT {
  13. UCHAR mUspReqType;
  14. UCHAR mUspRequest;
  15. union {
  16. struct {
  17. UCHAR mUspValueLow;
  18. UCHAR mUspValueHigh;
  19. };
  20. USHORT mUspValue;
  21. };
  22. union {
  23. struct {
  24. UCHAR mUspIndexLow;
  25. UCHAR mUspIndexHigh;
  26. };
  27. USHORT mUspIndex;
  28. };
  29. USHORT mLength;
  30. } mUSB_SETUP_PKT, *mPUSB_SETUP_PKT;
  31. ULONG WINAPI DriverCommand( ULONG iIndex, mPWIN32_COMMAND ioCommand );
Как сформировать такую структуру в C# для вызова этой функции?

Решение задачи: «DllImport и хитрая структура»

textual
Листинг программы
  1. [StructLayout(LayoutKind.Explicit, Size=размер)]
  2. struct  _WIN32_COMMAND
  3. {
  4.     [FieldOffset(0)] public uint    mFunction;
  5.     [FieldOffset(0)] public uint    mStatus;
  6.  
  7.     [FieldOffset(4)] public uint    mLength;
  8.  
  9.     [FieldOffset(8)] mUSB_SETUP_PKT  mSetupPkt;
  10.     [FieldOffset(8), MarshalAs(UnmanagedType.ByValArray, SizeConst = LENGTH)] public byte[]   mBuffer;
  11. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут