Python 項目中有時會兼顧執行效率和功能隱藏的需求,調用dll是個很好的選擇。本文介紹一下Python調用dll的方法,供大家參考。
開發工具:Visual Studio 2017,Pycharm
開發框架:C++ dll開發用MFC;Pycharm python項目
本文主要內容:
- C++編寫dll的主要功能實現;
- python 調用dll的實現方法;
- Python調用dll方法的總結。
1.C++編寫dll介面
step1 創建MFC 動態鏈接庫 應用程序
創建MFC 動態鏈接庫 應用程序
step2 查看工程結構並編譯生成dll 文件
查看工程結構並編譯生成dll 文件
step3 添加介面函數並編譯生成dll
添加介面函數,在CPP 文件中添加介面,形式如下,extern “C” __declspec(dllexport) +返回類型 +介面函數名稱+(參數1,參數2 …)
//帶參數和返回值的介面
extern"C" __declspec(dllexport) int Add(int a, int b)
{
return a + b;
}
//帶參數的介面
extern"C" __declspec(dllexport) void ShowTips(char* tips)
{
AfxMessageBox(tips);
}
//對話框介面函數調用
extern"C" __declspec(dllexport) void TestDialog(char* tips)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CDialogA* dlg = new CDialogA(NULL, tips);
dlg->DoModal();
}更多C++創建dll的方法可參考前面總結的C# 調用dll介面功能實現
2.python 調用dll
2.1載入DLL
dllPath = "./DllTest.dll"
pDll=ctypes.WinDLL(dllPath)
print (pDll)
載入DLL
2.2 調用帶參數和返回值的介面

調用Add介面
2.3 調用帶字元串參數的介面
#C++ 介面 原型:extern"C" __declspec(dllexport) void ShowTips(char* tips)
shpwtips = pDll.ShowTips
#設置輸入參數類型
shpwtips.argtypes = [ctypes.POINTER(ctypes.c_char)]
#傳參 字元串需要轉換
STR1 = (ctypes.c_char * 256)(*bytes("hello python call dll!", 'MBCS'))
#調用函數
shpwtips(STR1)
調用帶字元串參數的介面
2.4 調用對話框介面並傳參
#3 調用對話框介面
#extern"C" __declspec(dllexport) void TestDialog(char* tips)
shpwdialog = pDll.TestDialog
#設置輸入參數類型
shpwdialog.argtypes = [ctypes.POINTER(ctypes.c_char)]
#傳參
STR1 = (ctypes.c_char * 256)(*bytes("hello python call dll dialog!", 'MBCS'))
#調用函數
shpwdialog(STR1)
調用對話框介面並傳參
傳入參數
調用顯示dll對話框
3.總結
本文總結了Python調用dll的最基本的實現方法,僅供參考。總結一下本文的要點:
1)實現Python 調用帶參數和返回值的介面
2)實現Python調用帶參數不帶返回值的介面
3)實現Python調用帶參數的 對話框介面
4)功能實現需要在類介面中完成,python只負責調用,不負責實現;
5)介面函數如果帶參數,需要設置argtypes 類型,參數個數和類型與實際值保持一致(shpwtips.argtypes = [ctypes.POINTER(ctypes.c_char)]]);
6)調用介面之前,字元串參數本身也需要進行轉換(STR1 = (ctypes.c_char * 256)(*bytes(“hello python call dll dialog!”, ‘MBCS’))))
7)編碼方式,如果C++ dll 是多位元組 編碼的,用’MBCS’ ;如果是unicode 編碼的,用’utf-8′
更多擴展內容待總結。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/223427.html
微信掃一掃
支付寶掃一掃