下面小編就為大家帶來一篇Python呼叫C# Com dll元件實戰教學。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧
之前公司有套C# AES加解密方案,但是方案加密用的是Rijndael類,而非AES的四種模式(ECB、CBC、CFB、OFB,這四種用的是RijndaelManaged類),Python下Crypto庫AES也只有這四種模式,進而Python下無法實現C# AES Rijndael類加密效果了。
類似於這種C# 能實現的功能而在Python下實現不了的,蒐集資料有兩種解決方案,第一種方式,使用IronPython 直接調用C# dll文件,教程網上很多,不在贅述了,這種方式有個缺點,用的是ironPython而非Python,只是集成了一些.net framework庫的Python版本,更新維護少;第二種方式是,C# dll源碼編譯成Com組件,Python再調用COM組件Dll的方法。
網路上有很多Python呼叫COM dll教程,但大部分是C或C++編寫的dll,很少有比較全面的講解COM組件生成至調用過程,下面結合自己摸索多天的經歷,簡單介紹下如何產生COM元件,以及用Python如何呼叫COM dll元件,分享給大家。
我也是小白…^ ^,高手請飄過,如有寫的不對之處,還請多多包涵以指正...
1 .如何產生C# COM元件
我用的是Microsoft visual studio 2010, 首先新建--項目--選擇【類別庫】,名稱自訂:ComToPython,點選【確定】
#重新命名cs檔:ComToPython.cs,可自訂。 彈窗選擇【是】
##COM可見性設定為True:##上面等同於以下項目屬性設置:
勾選「為COM互通註冊」:
新簽章ComToPythonKey,取消勾選「使用密碼保護金鑰檔」
寫介面類別IMyClass,ComToPython類別實作介面的三個方法,例如Add()方法就是我們想要實作的功能,回傳a與b之和。
ComToPython類別之前的[ClassInterface(ClassInterfaceType.None)]一定要有,否則Python呼叫時會報錯。
[ProgId("ComToPython.Application")]指定Python呼叫COM時的名稱,後面Python程式碼會看到。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace ComToPython { [Guid("350779B9-8AB5-4951-83DA-4CBC4AD860F4")] public interface IMyClass { void Initialize(); void Dispose(); int Add(int x, int y); } [ClassInterface(ClassInterfaceType.None)] [Guid("16D9A0AD-66B3-4A8A-B6C4-67C9ED0F4BE4")] [ProgId("ComToPython.Application")] public class ComToPython: IMyClass { public void Initialize() { // nothing to do } public void Dispose() { // nothing to do } public int Add(int x, int y) { return x + y; } } }
#註:點選新GUID,可複製新建後的GUID:
#最後F6編譯產生解決方案,在你的工程Debug目錄下會有ComToPython.dll產生:
最後一步註冊COM元件至系統
開始功能表--開啟VS 2010 自帶CMD指令視窗(管理員權限)定位至ComToPython.dll資料夾下
執行:gacutil /i ComToPython.dll 新增dll至全域快取
執行:regasmComToPython.dll 註冊dll至系統
#2.Python如何呼叫#COM dll元件 我用的是Python 2.7,IDE用的PyCharm 2017.1,PyCharm新建--專案ComToPython,新建專案py檔ComToPython.py
#設定--新增兩個依賴函式庫:
新增安裝pywin32和comtypes依賴函式庫,以對應後面的兩種呼叫COM元件方式:
依賴裝好後,Python安裝目錄site-packages目錄下會有個win32com資料夾,雙擊C:\Python27\Lib\site-packages\win32com\client\下的makepy.py
選擇ComToPython,點選OK
#
然后拷贝上面VS2010生成的COM组件ComToPython.dll至PyCharm ComToPython项目文件夹下:
编写python调用COM dll代码:
#!/usr/bin/env python # -*- coding: utf-8 -*- a=1 b=2 print "方法一:" from win32com.client import Dispatch dll = Dispatch("ComToPython.Application") result = dll.Add(a, b) print "a + b = " + str(result) print "方法二:" import comtypes.client dll = comtypes.client.CreateObject('ComToPython.Application') result = dll.Add(a, b) print "a + b = " + str(result)
运行代码,执行结果如下:
以上就是Python调用C# COM Dll整个过程了
以上是Python呼叫C# Com dll元件的過程詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!