2015-01-03 61 views
3

我想了解如何使用python的內置ctypes模塊。我寫了一個簡單的C/C++代碼,返回Pi的倍數:無法從使用ctypes從python調用的c庫中獲取pi

#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 
} 

我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)) 

但它返回:

2226964 
2226964 

任何想法爲什麼會發生? 在此先感謝!

回答

2

Return Types文檔:

默認情況下的函數都返回c int類型。其他返回類型可以通過設置函數對象的restype屬性來指定。

所以,你應該做的:

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

謝謝你這麼mutch!它修復了這個錯誤,現在我可以在我的代碼中使用它。 – Sasszem

+0

如果解決了問題,您應該接受答案。 – Barmar

相關問題