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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM