python3使用ctypes在windows中訪問C和C++動態(tài)鏈接庫函數(shù)示例
這是我們的第一個示例,我們盡量簡單,不傳參,不返回,不訪問其他的動態(tài)鏈接庫
一測試環(huán)境介紹和準備
測試環(huán)境:
操作系統(tǒng):windows10
Python版本:3.7.0
VS版本:vs2015社區(qū)版(免費)
相關(guān)工具下載:
VS版本vs2015社區(qū)版(免費)
Python3.7.0 (源碼和安裝文件)
二C/C++部分代碼
1 首先完成C/C++的動態(tài)鏈接庫,與做python擴展庫不同,ctypes調(diào)用的c++庫其實與python沒有代碼關(guān)聯(lián),只是提供了開放公共標準。
2 創(chuàng)建VS的win32項目,選擇DLL庫的空項目,也可以選擇導出符號,他會幫你把動態(tài)庫的一些宏做好。

3 創(chuàng)建testctypes.cpp代碼

其中extern "C"表示將此函數(shù)編譯為c語言函數(shù),如果你源碼是.c也就是用c語言編譯則不需要加extern "C"。
__declspec(dllexport) 是windows中特有的導出庫函數(shù),如果沒有這個庫函數(shù)是訪問不到的,如果做跨平臺到linux中可以通過宏語法把它去掉。
4 將dll文件導出設(shè)置到當前項目路徑,并完成編譯

我們編譯出win32的debug庫,注意位數(shù)不能錯,如果是python是64位的也編譯64位的庫

三Python部分的代碼
from ctypes import *
lib = CDLL("testctypes") #可以加路徑
lib.CFunction()

from ctypes import * 導入ctypes庫所有類和函數(shù)
CDLL("testctype")加載具體的動態(tài)鏈接庫文件,可以加入路徑比如 dll/testctype ,在windows中省略動態(tài)庫的后綴名dll,python會找testctype.dll的文件。注意dll文件可以放在python執(zhí)行的路徑下,也可以放到系統(tǒng)路徑或者path環(huán)境變量所設(shè)置的路徑。
lib.CFunction() 加載動態(tài)鏈接庫中的CFunction函數(shù),注意雖然我們用c++來做擴展庫,python本身也做了很多支持c++的代碼,但ctypes訪問函數(shù)只支持C語言函數(shù),C++函數(shù)因為有重載函數(shù)名不確定,所以無法訪問。
運行測試結(jié)果

測試成功,第一步我們完成,下一篇文章再開始來添加參數(shù)和返回值
Python & C/C++聯(lián)合編程實戰(zhàn)視頻課程
http://laoxiaketang.com/python.html
