将C结构传递给python函数并访问python中用C初始化的char 2d数组
我是python新手。我想从我的C代码向Python函数发送一个指向结构的指针,然后从Python中访问C结构 我的结构有两个数据成员。是的将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.
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]