我正在Python中使用ctypes来访问共享C库中的函数。其中一个功能的参数之一需要一个char
类型的空数组才能将错误消息写入其中。 C ++中的数组代码很简单;
char messageBuffer[256];
我想用Python编写等效项,以便可以将包含正确数据类型的数组传递给函数。我曾尝试仅使用长度为256的Python创建和数组,但收到错误消息;
mydll.TLBP2_error_message(m_handle, errorCode, messageBuffer)
ArgumentError: argument 3: <class 'TypeError'>: Don't know how to convert parameter 3
感谢您的帮助。
答案 0 :(得分:3)
您可以在 ctype 包
中使用create_string_buffer()函数如果您需要可变的内存块,则ctypes具有一个create_string_buffer()函数,该函数可以通过各种方式创建它们。可以使用raw属性访问(或更改)当前存储块的内容。如果要以NUL终止的字符串访问它,请使用value属性:
>>> from ctypes import *
>>> p = create_string_buffer(3) # create a 3 byte buffer, initialized to NUL bytes
>>> print sizeof(p), repr(p.raw)
3 '\x00\x00\x00'
>>> p = create_string_buffer("Hello") # create a buffer containing a NUL terminated string
>>> print sizeof(p), repr(p.raw)
6 'Hello\x00'
>>> print repr(p.value)
'Hello'
>>> p = create_string_buffer("Hello", 10) # create a 10 byte buffer
>>> print sizeof(p), repr(p.raw)
10 'Hello\x00\x00\x00\x00\x00'
>>> p.value = "Hi"
>>> print sizeof(p), repr(p.raw)
10 'Hi\x00lo\x00\x00\x00\x00\x00'
>>>
要创建包含C类型wchar_t的Unicode字符的可变存储器块,请使用create_unicode_buffer()函数。