作为一个例子,我用一组参数调用Python函数。
VOID CallPythonFunction(
PSOME_COMPLEX_STRUCT Parameter1
, PSOME_COMPLEX_STRUCT Parameter2
, PSOME_COMPLEX_STRUCT Parameter3
, PSOME_COMPLEX_STRUCT Parameter4
)
{
PyObject* module_name = PyString_FromString((char*)"plugin");
PyObject* plugin = PyImport_Import(module_name);
PyObject* PyTargetFunction = PyObject_GetAttrString(plugin, (char*)"some_function");
PyObject* args = PyTuple_Pack(4
, PyLong_FromUnsignedLong((ULONG) Paramater1)
, PyLong_FromUnsignedLong((ULONG) Paramater2)
, PyLong_FromUnsignedLong((ULONG) Paramater3)
, PyLong_FromUnsignedLong((ULONG) Paramater4)
);
PyObject* result = PyObject_CallObject(PyTargetFunction, args);
}
此参数不是标准C类型,而是指向复杂结构的指针,例如。
typedef struct _SOME_COMPLEX_STRUCT
{
int field1;
char field2;
int whatever;
} SOME_COMPLEX_STRUCT, *PSOME_COMPLEX_STRUCT;
由于我将它转换为python int对象,我不知道如何使用ctypes
来处理它,或者我是否应该创建一个Python对象。
def some_function(parameter1, parameter2, parameter3, parameter4):
pass
有什么“更好”/规范的方法将此结构作为参数传递?
如何修改Python模块中的数据?我正在使用ctypes
。
我已经阅读了相关的问题/答案:
Passing a C struct to a Python function