python ctype, инициализирующий структуру

Моя структура содержит все неподписанные элементы char

typedef struct { unsigned char bE; unsigned char cH; unsigned char cL; unsigned char EId1; unsigned char EId0; unsigned char SId1; unsigned char SId0; unsigned char DLC; unsigned char D0; unsigned char D1; unsigned char D2; unsigned char D3; unsigned char D4; unsigned char D5; unsigned char D6; unsigned char D7; } CMsg; 

Следующая функция вызывает структуру

 extern int WriteCMessage(HANDLE hDev,CMsg* pMsg); 

Я преобразовал эту структуру в python ctype

 class CMsg(Structure): _fields_ = [('bE', c_char), ('cH', c_char), ('cL', c_char), ('EId1', c_char), ('EId0', c_char), ('SId1', c_char), ('SId0', c_char), ('DLC', c_char), ('D0', c_char), ('D1', c_char), ('D2', c_char), ('D3', c_char), ('D4', c_char), ('D5', c_char), ('D6', c_char), ('D7', c_char)] pmsg = CMsg('\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00','\x00') 

Затем я загрузил файл dll

 hllDll.WriteCANMessage(handle, pmsg) 

Но это дает ошибку

Ошибка: нарушение доступа при 0x00000000

  • Как получить список каталогов, отсортированный по дате создания в python?
  • Супер странная ошибка os.path.abspath
  • Не удается установить ggplot с anaconda
  • Кросс-компиляция скрипта Python в Linux в исполняемый файл Windows
  • Завершить подпроцесс в Windows, доступ запрещен
  • Могу ли я управлять архитектурой (32 бит против 64 бит) при создании исполняемого файла pyinstaller?
  • Установка anano в Windows 8 с включенным графическим процессором
  • многоплатформенный портативный питон
  • One Solution collect form web for “python ctype, инициализирующий структуру”

    Вы передали pmsg по значению, но функция ожидает указатель. Поскольку вы инициализировали все нули, функция заканчивает разыменование указателя NULL . Затем ctypes использует Windows SEH для маршрутизации нарушения доступа к исключению Python.

    Вам нужно использовать byref(pmsg) для передачи ссылки. Кроме того, определите argtypes функции, чтобы обеспечить правильную обработку указателя на 64-битных системах.

     from ctypes import * from ctypes.wintypes import * class CMsg(Structure): _fields_ = [ ('bE', c_ubyte), ('cH', c_ubyte), ('cL', c_ubyte), ('EId1', c_ubyte), ('EId0', c_ubyte), ('SId1', c_ubyte), ('SId0', c_ubyte), ('DLC', c_ubyte), ('D0', c_ubyte), ('D1', c_ubyte), ('D2', c_ubyte), ('D3', c_ubyte), ('D4', c_ubyte), ('D5', c_ubyte), ('D6', c_ubyte), ('D7', c_ubyte)] hllDll = cdll... hllDll.WriteCANMessage.argtypes = [HANDLE, POINTER(CMsg)] handle = ... pmsg = CMsg() # initially memset to {0} hllDll.WriteCANMessage(handle, byref(pmsg)) 
    Python - лучший язык программирования в мире.