我正在尝试使用Cython对以下头文件所写的C++动态链接库进行包装:
#define EXTERN_DLL_EXPORT extern "C" __declspec(dllexport)
struct cmplx64
{
float re;
float im;
};
EXTERN_DLL_EXPORT int foo(cmplx64 *arr, int arr_sz);
PXD文件:
cdef extern from "mylib.h":
cdef struct cmplx64:
np.float64_t re
np.float64_t im
int foo(cmplx64 *arr, int arr_sz) except +
PYX文件:
cimport cmylib
import numpy as np
cimport numpy as np
import cython
def foo(np.ndarray[np.complex64_t, ndim=1] arr, int arr_sz):
return cmylib.foo(&arr[0], arr_sz)
我的安装文件没有出现问题。
由于缺少struct
定义,我尝试按照建议构建了一个cppclass
,但是我没有像当前这种方法那样成功。
我收到的错误消息是:
Cannot assign type 'float complex *' to 'complexFloatStruct *'
我的问题是由于我正在使用的库的作者使用结构体定义了一个复杂类型,而不是简单地使用C++ std
库中内置的复杂类型。如果是这样,我就没有问题了。
然而,我认为将C++类或结构体包装成Cython应该是完全合理的。我已经仔细阅读了文档,但几乎失败了。感谢您的帮助!
arr
? - bactone