如何用ctypes封装这个有多个参数的C函数?

0 投票
2 回答
1081 浏览
提问于 2025-04-15 14:04

我这里有一个函数的原型:

extern "C" void __stdcall__declspec(dllexport) ReturnPulse(double*,double*,double*,double*,double*);

我需要写一些Python代码来访问这个在DLL里的函数。我已经加载了DLL,但每个double*实际上指向的是一个可变数量的double(也就是一个数组),我在让它正常工作上遇到了困难。

谢谢大家!

2 个回答

1

我对ctypes了解得不多,但你可以试试用合适类型的numpy数组。如果这样做不行,它们还有一个ctypes属性,里面应该有指向数据的指针。

1

如果你想创建一个包含 n 个双精度浮点数的数组,可以这样做:

arr7 = ctypes.c_double * `n` 
x = arr7()

然后把 x 传递给你的函数,函数需要一个 double* 类型的参数。或者,如果你在创建 x 的时候需要初始化它,可以这样:

x = arr7(i*0.1 for i in xrange(7))

类似的,你可以对 x 进行循环,使用索引等操作。

撰写回答