delphi調用python文件_delphi與python混合編程(轉)


1,緣起

某個項目需要實現數據加密上傳,主程序擬采用delphi7實現,其中的數據加密采用RSA,Cipher_pkcs1_v1_5加密。

該加密在python中容易實現,且已經有現成的加密函數。

如果在delphi中重新實現該算法,由於無現成的庫可用,需要自己編寫,比較麻煩且結果不一定正確。

因此,delphi程序如何能借用已有的python算法成為一個現實問題。

2,思路

首先,python源碼在現場運行不現實,因為在現場電腦上安裝python運行環境會面臨不確定性。因此,首先否定運行python源碼的想法。

其次,采用 python4delphi?感覺不好,存在隱患:涉及Python版本、P4D版本,Python依賴庫、unicode等。對當前delphi IDE環境也有破壞。

再次,既然不能運行python源碼,那么能否將python源碼編譯為exe程序呢?答案是肯定的,采用pyinstaller就行。

因此,確定架構為delphi EXE程序(以下簡稱DE程序)調用Python EXE程序(以下簡稱PE程序)

3,DE與PE的調用方式

那么DE程序如何調用PE程序呢?

很明顯的一種方式是 DE采用winExec函數,調用PE,傳入待加密字符串,返回加密結果

但此法的缺點很明顯,如

每次加密均需調用運行釋放PE一次,耗費時間

不能同步返回結果,winExec啟動PE程序后就返回,DE程序需要循環判斷PE程序釋放執行完成

最關鍵的一點,winExec不能返回PE程序退出時的返回值

因此,很自然地想到采用UDP通信方式。好處也是顯而易見的,

調用關系明確,DE啟動時自動啟動PE,DE退出時自動關閉PE

同步調用,響應及時。IdUDPClient1.Send后,IdUDPClient1.ReceiveString會阻塞,直到結果返回。

4,demo運行

下圖中server.exe來源於server.py代碼,由pyinstaller編譯為windows EXE文件。

delphi程序請求加密,server.exe收到數據后將其加密后返回,delphi程序將密文顯示在右側列表框。

459651-20200423153217299-995885010.png

5,總結

混合編程可以發揮多種語言的優勢。已有的功能不妨多包裝借用,省時省力且質量有保障。

多程序間數據交換盡可能采用UDP、TCP協議,使用靈活、速度快捷。

相關資源: Python4Delphi


免責聲明!

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



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