1. 程式人生 > >python3使用ctypes在windows中訪問C和C++動態連結庫函式示例

python3使用ctypes在windows中訪問C和C++動態連結庫函式示例

python3使用ctypes在windows中訪問C和C++動態連結庫函式示例

這是我們的第一個示例,我們儘量簡單,不傳參,不返回,不訪問其他的動態連結庫

測試環境介紹和準備

測試環境:

作業系統:windows10

Python版本:3.7.0

VS版本:vs2015社群版(免費)

相關工具下載:

VS版本vs2015社群版(免費)

Python3.7.0 (原始碼和安裝檔案)

http://ffmpeg.club/python

C/C++部分程式碼

1 首先完成C/C++的動態連結庫,與做python擴充套件庫不同,ctypes呼叫的c++庫其實與python沒有程式碼關聯,只是提供了開放公共標準。

 

2 建立VS的win32專案,選擇DLL庫的空專案,也可以選擇匯出符號,他會幫你把動態庫的一些巨集做好。

 

 

3 建立testctypes.cpp程式碼

 

其中extern "C"表示將此函式編譯為c語言函式,如果你原始碼是.c也就是用c語言編譯則不需要加extern "C"。

__declspec(dllexport) 是windows中特有的匯出庫函式,如果沒有這個庫函式是訪問不到的,如果做跨平臺到linux中可以通過巨集語法把它去掉。

 

4 將dll檔案匯出設定到當前專案路徑,並完成編譯

 

我們編譯出

win32的debug庫,注意位數不能錯,如果是python是64位的也編譯64位的庫

 

 

Python部分的程式碼

from ctypes import *

lib = CDLL("testctypes") #可以加路徑

lib.CFunction()

 

from ctypes import * 匯入ctypes庫所有類和函式

CDLL("testctype")載入具體的動態連結庫檔案,可以加入路徑比如 dll/testctype ,在windows中省略動態庫的字尾名dll,python會找testctype.dll的檔案。注意dll檔案可以放在python執行的路徑下,也可以放到系統路徑或者path環境變數所設定的路徑。

lib.CFunction() 載入動態連結庫中的CFunction函式,注意雖然我們用c++來做擴充套件庫,python本身也做了很多支援c++的程式碼,但ctypes訪問函式只支援C語言函式,C++函式因為有過載函式名不確定,所以無法訪問。

執行測試結果

 

測試成功,第一步我們完成,下一篇文章再開始來新增引數和返回值

 相關課程視訊可以觀看

http://laoxiaketang.com/python.html