У меня есть эта функция для связи с оптическим лазерным тюнером из библиотеки C
long EXPORT newp_usb_get_model_serial_keys (char** ppBuffer);
, где "ppbuffer" - это указатель на массив символов с нулевым символом в конце, гдеиндекс массива - это «DeviceID», и каждый элемент содержит ключ «Модель / Серийный номер» (из файла заголовка библиотеки).Функция создает упоминание массива в описании ppbuffer и возвращает 0 для успеха, ненулевое значение для сбоя.
Я определил следующую функцию в Python 2.7.15 как одну из нескольких для связи с лазером:
from ctypes import *
def get_key(self):
buf = create_string_buffer('\000'*1024)
pbuf = pointer(buf)
nread = c_ulong()
status = self.lib.newp_usb_get_model_serial_keys(pbuf)
if status != 0:
raise CommandError("error")
else:
# dereference pointer and store/return values in the array
Функция newp_usb_get_model_serial_keys успешно выполнена, но у меня возникли проблемы с разыменованием указателя pbuf.Я изо всех сил пытался понять некоторые методы, такие как использование cast () (и я не уверен, что это то, что лучше всего использовать в любом случае), и использование pbuf.contents просто возвращает
<ctypes.c_char_Array_1025 object at 0x0000000013557AC8>
, который кажется совсем другимиз того, что я видел в вопросах других людей по схожим темам.
Я пытался использовать POINTER () вместо pointer (), но, похоже, нет ctype для указателя на строковый массивдля первого аргумента POINTER ().Я чувствую, что может быть лучший способ сделать это?Или, может быть, я просто что-то здесь упускаю из-за того, как получить доступ к хранимым строкам?