python3使用ctypes在windows中訪問C和C++動態(tài)鏈接庫函數(shù)示例

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 (源碼和安裝文件)

http://ffmpeg.club/python

二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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容