Мне нужно получить доступ, а затем передать указатель на структуру C, используя ctypes. Мне не нужно использовать это непосредственно в Python - PullRequest
0 голосов
/ 24 апреля 2020

Код C выглядит следующим образом:

struct huge_structure *huge = create_reference_for_huge_struct(27);
int return_val = use_reference_of_huge_struct(huge);

Мне не нужно обращаться или использовать структуру C в самом Python, просто передать ее другому C functions.

Я настроил Python следующим образом (обращается к коду через загруженный dll):

dll_handle.create_reference_for_huge_struct.restype = ctypes.c_void_p
dll_handle.create_reference_for_huge_struct.argtype = [ctypes.c_int]

dll_handle.use_reference_of_huge_struct.restype = ctypes.c_int
dll_handle.use_reference_of_huge_struct.argtype = [ctypes.c_void_p]

huge_ref = huge_lib.create_reference_for_huge_struct(27)
retval = huge_lib.use_reference_of_huge_struct(huge_ref)

Итак, я попробовал это, и для некоторых вызовов это кажется, работает, но для большинства из них это не так. Пустой указатель для использования в качестве заполнителя для огромной конструкции, кажется, не идеально подходит. Я действительно не хочу копировать всю структуру в Python через ctypes, просто никогда не использовать ее, поскольку она просто передается другим подпрограммам в dll.

Я думаю, что это не новая ситуация. Так что у кого-то есть понятие, и, возможно, подобный вопрос уже был опубликован. Я уточню любые детали.

...