我在DLL中有一个C函数,它通过ctypes回调到Python函数。
C函数使用以下原型调用该函数:
void GetData(u8 Buffer[], u16 Length);
请注意,缓冲区指向DLL中保存的静态数据数组。
我为此生成了一个Python函数类型,如下所示:
CFUNCTYPE(None, c_char_p, c_int)
我的Python回调函数被调用而没有任何明显的问题。
我的问题是,我无法弄清楚如何让ctypes将原始数据添加到Python外部的缓冲区。有没有办法定义一个ctypes字符串缓冲区并给它DLL缓冲区的地址?
答案 0 :(得分:2)
您可以使用libc中的memcpy
。如果您的c_char_p
为buffer
且c_int
为bufferlen
:
libc = ctypes.cdll.LoadLibrary('libc.so.6')
content = 'My new content'
bufcontent = ctypes.create_string_buffer(content)
libc.memcpy(buffer. newcontent, min(len(content) + 1, bufferlen))
与在C中所做的相同。(请注意,我已将memcpy用于可能的二进制内容,但如果您不关心它,请使用strncpy
代替)< / p>