Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C结构传递给python函数并访问python中用C初始化的char 2d数组_Python_C++_C_Swig - Fatal编程技术网

将C结构传递给python函数并访问python中用C初始化的char 2d数组

将C结构传递给python函数并访问python中用C初始化的char 2d数组,python,c++,c,swig,Python,C++,C,Swig,我是python新手。我想从我的C代码向Python函数发送一个指向结构的指针,然后从Python中访问C结构 我的结构有两个数据成员。是的 int num_of_ker; char *ker_name[50]; 我是如何从你那里得到答案的 我的项目 %module MyProject %inline %{ struct SPythoned { int num_of_ker; char *ker_name[50]; }; %} main.

我是python新手。我想从我的C代码向Python函数发送一个指向结构的指针,然后从Python中访问C结构

我的结构有两个数据成员。是的

int num_of_ker;
char *ker_name[50];
我是如何从你那里得到答案的

我的项目

%module MyProject   
%inline %{       
struct SPythoned 
{
        int num_of_ker;
        char *ker_name[50];
};
%}
main.cpp

#include <stdio.h>
#include <Python.h>

extern "C"      // only needed when compiling in C++
{
        #include "MyProject_wrap.c"
}

// struct SPythoned is defined within MyProject_wrap.c just included above


void PythonTest(void)
{

        Py_Initialize();        // Init Python
        SWIG_init();            // Initialise SWIG types
        init_MyProject();               // Init our project wrapped by Swig

        PyRun_SimpleString("import sys");
        PyRun_SimpleString("sys.path.append(\"./\")");

        SPythoned Object;
        PyObject *pMod, *pGlobalDict, *pFunc, *pResult, *pArg;

        Object.num_of_ker = 2;
        int i;
        for(i=0;i<2;i++)
        {
                char name[50];
                sprintf(name,"kernel_%d",i);
                Object.ker_name[i]=strdup(name);
        }

        pMod = PyImport_ImportModule("PyTest"); // Load "PyTest.py" (it will create a compiled version "PyTest.pyc")

        if (pMod)
        {
                pGlobalDict = PyModule_GetDict(pMod);   // Get main dictionary

                if (pGlobalDict)
                {
                        pFunc = PyDict_GetItemString(pGlobalDict, "TestObject");        // Look for function TestObject

                        if (pFunc)
                        {
                                pArg = SWIG_NewPointerObj((void*)&Object, SWIGTYPE_p_SPythoned, 1);     // Get Python Object for our Structure Pointer

                                if (pArg)
                                {
                                        pResult = PyObject_CallFunction(pFunc, "O", pArg);
                                        Py_CLEAR(pResult);
                                }
                        }
                }
        }

        Py_Finalize();
}

int main()
{
PythonTest();
return 0;
}

Inmain.cpp我正在初始化num_of_ker和keru name数据成员。我可以从PyTest.py文件中访问keru变量的num_,但我不知道如何访问PyTest.py文件中的keru名称。有人能帮我吗?

好奇的是,你能分享一下你是如何做到这一点的吗?看不出你的链接是如何回答的。。
import MyProject

def TestObject(o):
        print  "ker_num " , o.num_of_ker
        for i in range(o.num_of_ker):
                print "kername ",o.ker_name[i]