使用SWIG从Python访问C结构

2024-03-29 12:31:51 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我试着做最简单的结构访问…但我做不到

约巴·h:

typedef struct{
    int bar;
} foo;

尤巴。一:

^{pr2}$

在设置.py公司名称:

^{3}$

在批处理文件公司名称:

python setup.py build_ext --inplace -ccygwin
pause

所以,我得到了这样的输出:

D:\pro\py\mod-test>python setup.py build_ext --inplace -ccygwin 
running build_ext
building '_yoba' extension
swigging yoba.i to yoba_wrap.cpp
D:\tools\cygwin\bin\swig.exe -python -py3 -c++ -module yoba -o yoba_wrap.cpp yoba.i
D:\tools\cygwin\bin\gcc.exe -mcygwin -mdll -O -Wall -ID:\tools\python3.2\include -ID:\tools\python3.2\PC -c yoba_wrap.cpp -o build\temp.win32-3.2\Release\yoba_wrap.o
writing build\temp.win32-3.2\Release\_yoba.def
D:\tools\cygwin\bin\g++.exe -mcygwin -shared -s build\temp.win32-3.2\Release\yoba_wrap.o build\temp.win32-3.2\Release\_yoba.def -LD:\tools\python3.2\libs -LD:\tools\python3.2\PCbuild -lpython32 -lmsvcr90 -o D:\pro\py\mod-test\_yoba.pyd 

一切看起来都很好,但是当我试图执行这样的代码时:

import yoba


f = yoba.foo()

什么也没发生,我用“工作”Python得到了100%的cpu负载。欢迎有任何想法。在

添加

所以,我想确定“坏”的代码。我很困惑…它在swig生成的中。在

SWIGINTERN PyObject *_wrap_new_foo(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
  PyObject *resultobj = 0;
  foo *result = 0 ;

  if (!PyArg_ParseTuple(args,(char *)":new_foo")) SWIG_fail;
  result = (foo *)new foo();
  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_foo, SWIG_POINTER_NEW |  0 );
  return resultobj;
fail:
  return NULL;
}

在线:

result = (foo *)new foo();

什么鬼东西?在

已解决:

使用-cmingw32代替-ccygwin。不明白,但它很管用。在


Tags: pybuildnewreleasefooresulttoolstemp