我在Windows 8上使用ctypes从Python 3.4脚本调用C函数。我使用cygwin gcc创建了一个DLL。只要我只使用参数和局部变量,C函数就可以正常工作,但是函数中定义的指针的任何引用都会失败(没有错误消息或核心文件,只是一个静默程序崩溃)。例如,以下操作失败:
CALC_Z_SER_DLL int calc_z_ser(struct complex_num *q, int *output,
int len_q, int maxiter) {
int *malloctest = malloc(sizeof(int));
*malloctest = 42; /* crashes here */
但是,我可以使用指针访问数组参数,没有问题。
我需要在Windows DLL中使用特殊指针类型吗?或者在构建DLL时我需要使用一些特定于Windows的选项?在C函数的头文件中,我使用了这个声明:
#ifdef BUILDING_CALC_Z_SER_DLL
#define CALC_Z_SER_DLL __declspec(dllexport)
#else
#define CALC_Z_SER_DLL __declspec(dllimport)
#endif
int CALC_Z_SER_DLL calc_z_ser(struct complex_num *q, int *output,
int len_q, int maxiter);