python中的ctypes模組可能是python呼叫c方法中最簡單的一種。ctypes模組提供了和c語言相容的資料型別和函式來載入dll檔案,因此在呼叫時不需對原始檔做任何的修改。也正是如此奠定了這種方法的簡單性。
示例如下
實現兩數求和的c**,儲存為add.c
//sample c file to add 2 numbers - int and floats
#include
int add_int(int, int
);float add_float(float, float
);int add_int(int num1, int
num2)
float add_float(float num1, float
num2)
接下來將c檔案編譯為.so
檔案(windows下為dll)。下面操作會生成adder.so檔案
#for linux現在在你的python**中來呼叫它$ gcc -shared -wl,-soname,adder -o adder.so -fpic add.c
#for mac
$ gcc -shared -wl,-install_name,adder.so -o adder.so -fpic add.c
#for windows
$gcc -shared -wl,-soname,adder -o adder.dll -fpic add.c
from ctypes import *#load the shared object file
adder = cdll('
./adder.so')
#find sum of integers
res_int = adder.add_int(4,5)
"sum of 4 and 5 =
" +str(res_int)
#find sum of floats
a = c_float(5.5)
b = c_float(4.1)
add_float =adder.add_float
add_float.restype =c_float
"sum of 5.5 and 4.1 =
", str(add_float(a, b))
輸出如下
sum of 4 and 5 = 9
sum of 5.5 and 4.1 = 9.60000038147
在這個例子中,c檔案是自解釋的,它包含兩個函式,分別實現了整形求和和浮點型求和。
在python檔案中,一開始先導入ctypes模組,然後使用cdll函式來載入我們建立的庫檔案。這樣我們就可以通過變數adder
來使用c類庫中的函式了。當adder.add_int()
被呼叫時,內部將發起乙個對c函式add_int
的呼叫。ctypes介面允許我們在呼叫c函式時使用原生python中預設的字串型和整型。
而對於其他類似布林型和浮點型這樣的型別,必須要使用正確的ctype型別才可以。如向adder.add_float()
函式傳參時, 我們要先將python中的十進位制值轉化為c_float型別,然後才能傳送給c函式。這種方法雖然簡單,清晰,但是卻很受限。例如,並不能在c中對物件進行操作。
C 呼叫Python語言
是一種在 net和 mono 上實現的 python 語言 2.開啟vs,新增兩個引用,在ironpython的安裝根目錄下面選擇ironpython.dll和microsoft.scripting.dll using microsoft.scripting.hosting using ironpy...
C語言不能呼叫Python
c語言是結構化程式設計語言,python是物件導向的語言,二者之間有條 代溝 python呼叫c語言,沒有問題,這叫 向下相容 但是,反過來則不行,不許c呼叫python,那叫 以下犯上 敢這樣說,是因為我有實驗的證據。為了mt4程式設計的需要,我用lcc編譯的程式呼叫python,結果,撞上了南牆...
python 呼叫c語言函式
雖然python是萬能的,但是對於某些特殊功能,需要c語言才能完成。這樣,就需要用python來呼叫c的 了 具體流程 c編寫相關函式 編譯成庫 然後在python中載入這些庫,指定呼叫函式。這些函式可以char int,float,還能返回指標。以下示例 通過python呼叫c函式,返回 hell...