Как мне использовать ctypes.create_string_buffer, чтобы передать его в качестве аргумента char * для функции C?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как мне использовать ctypes.create_string_buffer, чтобы передать его в качестве аргумента char * для функции C?

Сообщение Anonymous »

У меня есть dll C/C++ с функцией:

Код: Выделить всё

int get_camera_info(char * description, char * serial_number, char * manufacturer)
Эта функция принимает аргументы и изменяет их, чтобы их можно было распечатать. Я пытаюсь использовать эту DLL из Python, используя ctypes. Думаю, мне нужно будет использовать ctypes.create_string_buffer, чтобы создать пустой буфер, чтобы у меня был изменяемый объект. Но как мне сделать так, чтобы я мог передать его в качестве аргумента, а затем получить данные?
Нужно ли мне использовать cast(buffer_object, c_char_p_object)? Чем это будет отличаться от создания и передачи объекта c_char_p? Я мало что знаю о C/C++, но, возможно, мне следует использовать ctypes.POINTER.
Моя проблема заключалась в том, что после передачи объекта типа c_char_p в качестве аргумента я получаю сообщение об ошибке: OSError: исключение: нарушение прав доступа при чтении 0x00000000.
Если вам нужна помощь, чтобы понять, в чем заключается мой вопрос, просто спросите. Или, если вы считаете, что мне лучше использовать что-то вроде cppyy, то мне тоже понадобится помощь.

Подробнее здесь: https://stackoverflow.com/questions/673 ... nt-for-a-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»