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沒有代碼關聯,只是提供了開放公共標準。html

2 建立VS的win32項目,選擇DLL庫的空項目,也能夠選擇導出符號,他會幫你把動態庫的一些宏作好。
python3使用ctypes在windows中訪問C和C++動態連接庫函數示例
3 建立testctypes.cpp代碼
python3使用ctypes在windows中訪問C和C++動態連接庫函數示例
其中extern "C"表示將此函數編譯爲c語言函數,若是你源碼是.c也就是用c語言編譯則不須要加extern "C"。
__declspec(dllexport) 是windows中特有的導出庫函數,若是沒有這個庫函數是訪問不到的,若是作跨平臺到linux中能夠經過宏語法把它去掉。python

4 將dll文件導出設置到當前項目路徑,並完成編譯
python3使用ctypes在windows中訪問C和C++動態連接庫函數示例
咱們編譯出win32的debug庫,注意位數不能錯,若是是python是64位的也編譯64位的庫
python3使用ctypes在windows中訪問C和C++動態連接庫函數示例linux

三 Python部分的代碼
from ctypes import
lib = CDLL("testctypes") #能夠加路徑
lib.CFunction()
python3使用ctypes在windows中訪問C和C++動態連接庫函數示例
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++函數由於有重載函數名不肯定,因此沒法訪問。
運行測試結果
python3使用ctypes在windows中訪問C和C++動態連接庫函數示例
測試成功,第一步咱們完成,下一篇文章再開始來添加參數和返回值c++

相關課程視頻能夠觀看
python3使用ctypes在windows中訪問C和C++動態連接庫函數示例
http://edu.51cto.com/course/15278.htmlwindows

相關文章
相關標籤/搜索