我从python函数返回以下结构的对象
class Bus(Structure):
_fields_ = [ ("a", c_int),
("b", c_char),
("c", c_float),
("d", c_double),
("e", c_char_p)
]
def GetBus( *args, **kwargs ):
Signal = cast(c_char_p(kwargs['Bus']), POINTER(Bus )).contents
## Logic that updates Signal
return Signal
在我的C代码中,我希望通过解析bus
来更新我的C结构pValue
,获取自:
Bus bus ;
python_Bus = Py_BuildValue("s#", (char* )&bus, sizeof(Bus)) ;
PyDict_SetItemString( pDict,"Bus", python_Bus ) ;
PyObject* pValue = PyObject_Call(pFunc, pArgs,pDict) ;
如何解析pValue
?
有Py???_???(pvalue, ???) ;
吗?或者如何将其转换为char*
并在我的C代码中执行memcpy
(如果这样)?
我也尝试过创建一个新的Python类型,但看起来在我的“Py_BuildValue
”函数中归结为getter
,我不希望有几个“{{1} “对于每个元素。
使用Python2.7
答案 0 :(得分:2)
假设您使用ctypes.Structure
,则可以使用Buffer interface的实现。
尝试类似:
Py_buffer view = { 0 };
PyObject_GetBuffer(pvalue, &view, PyBUF_SIMPLE);
// use view.buf, which is of void*
PyBuffer_Release(&view);
您可能需要添加一些错误处理以确保获取正确的数据。