无法使用 ctypes 从 python 调用的 c 库中获取 pi

Cannot get pi from a c library called from python using ctypes

我想了解如何使用 python 的内置 ctypes 模块。我写了一个简单的 c/c++ 代码,其中 returns 圆周率的倍数:

#define pi 3.14159265358979323846 //I tried this one too, not works.
double ppi(int n){
return n*3.14159265358979323846; //The same number multiplied by n
} 

我用 Code::Blocks 使用命令

使用 MinGW 编译它
 gcc -shared -Wl,-soname,mylib.so -o mylib.so -fPIC mylib.c

我得到了一个可爱的 .so 文件并尝试在 python 代码中使用它:

 from ctypes import CDLL
 myModule=CDLL('mylib.so')
 print(myModule.ppi(1))
 print(myModule.ppi(2))

但是 returns:

 2226964
 2226964

知道为什么会这样吗? 提前致谢!

来自 Return Types 文档:

By default functions are assumed to return the C int type. Other return types can be specified by setting the restype attribute of the function object.

所以你应该这样做:

myModule.ppi.restype = c_double
print(myModule.ppi(1))
print(myModule.ppi(2))