運行dll文件的方法:如何打開dll文件代碼

Python 項目中有時會兼顧執行效率和功能隱藏的需求,調用dll是個很好的選擇。本文介紹一下Python調用dll的方法,供大家參考。

開發工具:Visual Studio 2017,Pycharm

開發框架:C++ dll開發用MFC;Pycharm python項目

本文主要內容:

  • C++編寫dll的主要功能實現;
  • python 調用dll的實現方法;
  • Python調用dll方法的總結。

1.C++編寫dll介面

step1 創建MFC 動態鏈接庫 應用程序詳解Python調用dll功能實現

創建MFC 動態鏈接庫 應用程序

step2 查看工程結構並編譯生成dll 文件詳解Python調用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)

詳解Python調用dll功能實現

載入DLL

2.2 調用帶參數和返回值的介面

詳解Python調用dll功能實現

調用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)

詳解Python調用dll功能實現

調用帶字元串參數的介面

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)

詳解Python調用dll功能實現

調用對話框介面並傳參詳解Python調用dll功能實現

傳入參數詳解Python調用dll功能實現

調用顯示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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 14:20
下一篇 2024-12-09 14:20

相關推薦

發表回復

登錄後才能評論