使用ctypes将结构指针从C返回到Python - 在64位系统上使用32位python

时间:2012-09-06 18:30:43

标签: python pointers struct ctypes fftw

我正在尝试访问使用ctypes返回结构指针的C函数。我正在使用EPD的32位ipython。我在64位CentOS机器上,但我必须使用32位Python,因为共享库是32位。当我尝试获取结构指针时,我遇到了分段错误。我不需要访问struct字段,因为我只使用struct作为另一个C函数的输入。代码看起来像这样。

from ctypes import *

libfoo = CDLL("libfoo.so")

func1 = libfoo.func1
func2 = libfoo.func2

func1.restype = c_void_p

obj = func1() # This is where it stops with segfault

func2 (data, obj)

C代码


typedef struct
{
    int int1;
    int int2;
    float float1;
    float *arr;
    fftwf_plan fft;
} mystruct;


mystruct *func1(void)
{
    mystruct *bar = (mystruct *) malloc (sizeof(mystruct));

    bar->int1 = 1;
    bar->int2 = 2;
    bar->float1 = 1.0;
    ....

    bar->arr = (float *) fftwf_malloc (sizeof(float) * (FFT_LEN + 2));
    bar->fft = fftwf_plan_dft_r2c_1d (FFT_LEN, ch->arr, (fftwf_complex *)ch->arr, FFTW_MEASURE);

    return bar;
}

void func2 (float *data, mystruct *bar)
{
    ....
}

我也试过创建一个ctypes结构对象,但仍然遇到了段错误。如果可能的话,我想简单地将指针传递给func2,而不必创建一个ctypes结构。我已经阅读了几篇有类似问题的帖子,但没有一个真正匹配。

0 个答案:

没有答案