使用指向struct的C指针作为参数调用Python函数

时间:2016-02-11 17:49:49

标签: python c pointers struct ctypes

作为一个例子,我用一组参数调用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

passing c++ double pointer to python

Passing c struct to a function using ctypes

0 个答案:

没有答案