【发布时间】:2012-01-27 17:11:11
【问题描述】:
我正在为 DLL 编写 Python ctypes 包装器。
当事件发生时,DLL 会尝试使用以下原型调用回调函数:
void Function(u8 *Data, u16 Length)
本质上,它为我们提供了一个指向原始数据缓冲区的指针,以及该缓冲区的长度。
我正在尝试在我的 python 代码中找到一种接收和处理这些数据的方法。
如果我将 ctypes 函数类型声明为 char 指针:
TX_CALLBACK_FUNC_TYPE = CFUNCTYPE(None, c_char_p, c_int)
然后数据被视为以空字符结尾的字符串,如果缓冲区中存在任何 0x00 字节,我将得到截断的数据。
如果我将 ctypes 函数类型声明为 void 指针:
TX_CALLBACK_FUNC_TYPE = CFUNCTYPE(None, c_void_p, c_int)
然后我得到一个长整数值,我假设它是原始数据的地址 - 但我不知道如何检索数据以在 Python 中使用它。
如果我将 ctypes 函数类型声明为指向 char 的指针:
TX_CALLBACK_FUNC_TYPE = CFUNCTYPE(None, POINTER(char), c_int)
然后我得到一个 ctypes.LP_c_char 对象,但我不知道如何访问对象中的原始数据。
在 Python 中访问从包装的 DLL 返回的原始数据的最佳方法是什么?
【问题讨论】: