Python調(diào)用C# Com dll組件實(shí)戰(zhàn)教程
之前公司有套C# AES加解密方案,但是方案加密用的是Rijndael類,而非AES的四種模式(ECB、CBC、CFB、OFB,這四種用的是RijndaelManaged類),Python下Crypto庫(kù)AES也只有這四種模式,進(jìn)而Python下無(wú)法實(shí)現(xiàn)C# AES Rijndael類加密效果了。
類似于這種C# 能實(shí)現(xiàn)的功能而在Python下實(shí)現(xiàn)不了的,搜集資料有兩種解決方案,第一種方式,使用IronPython 直接調(diào)用C# dll文件,教程網(wǎng)上很多,不在贅述了,這種方式有個(gè)缺點(diǎn),用的是ironPython而非Python,只是集成了一些.net framework庫(kù)的Python版本,更新維護(hù)少;第二種方式是,C# dll源碼編譯成Com組件,Python再調(diào)用COM組件Dll的方法。
網(wǎng)上有很多Python調(diào)用COM dll教程,但大部分是C或C++編寫的dll,很少有比較全面的講解COM組件生成至調(diào)用過(guò)程,下面結(jié)合自己摸索多天的經(jīng)歷,簡(jiǎn)單介紹下如何生成COM組件,以及用Python如何調(diào)用COM dll組件,分享給大家。
我也是小白 ……^ ^,高手請(qǐng)飄過(guò),如有寫的不對(duì)之處,還請(qǐng)多多包涵以指正...
1.如何生成C# COM組件
我用的是Microsoft visual studio 2010, 首先新建--項(xiàng)目--選擇【類庫(kù)】,名稱自定義:ComToPython,點(diǎn)擊【確定】
重命名cs文件:ComToPython.cs,可自定義。 彈窗選擇【是】
COM可見(jiàn)性設(shè)置為 True:
上面等同于以下項(xiàng)目屬性設(shè)置:
勾選“為COM互操作注冊(cè)”:
新建簽名ComToPythonKey,取消勾選 “使用密碼保護(hù)密鑰文件”
編寫接口類IMyClass,ComToPython類實(shí)現(xiàn)接口的三個(gè)方法,例如Add()方法就是我們想要實(shí)現(xiàn)的功能,返回a與b之和。
ComToPython類之前的[ClassInterface(ClassInterfaceType.None)]一定要有,否則Python調(diào)用時(shí)會(huì)報(bào)錯(cuò)。
[ProgId("ComToPython.Application")]指定Python調(diào)用COM時(shí)的名稱,后面Python代碼會(huì)看到。
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使用VS2010自帶工具生成,工具--創(chuàng)建GUID,點(diǎn)擊復(fù)制兩個(gè)GUID分別放至兩個(gè)類名之前
注:點(diǎn)擊新建GUID,可復(fù)制新建后的GUID:
最后F6編譯生成解決方案,在你的工程Debug目錄下會(huì)有ComToPython.dll生成:
最后一步注冊(cè)COM組件至系統(tǒng)
開(kāi)始菜單--打開(kāi)VS 2010 自帶CMD命令窗口(管理員權(quán)限)定位至ComToPython.dll文件夾下
執(zhí)行:gacutil /i ComToPython.dll 添加dll至全局緩存
執(zhí)行:regasmComToPython.dll 注冊(cè)dll至系統(tǒng)
2.Python如何調(diào)用COM dll組件
我用的是Python 2.7,IDE用的PyCharm 2017.1,PyCharm新建--項(xiàng)目ComToPython,新建項(xiàng)目py文件ComToPython.py
設(shè)置--添加兩個(gè)依賴庫(kù):
添加安裝pywin32和comtypes依賴庫(kù),以對(duì)應(yīng)后面的兩種調(diào)用COM組件方式:
依賴裝好后,Python安裝目錄site-packages目錄下會(huì)有個(gè)win32com文件夾,雙擊C:\Python27\Lib\site-packages\win32com\client\下的makepy.py
選擇ComToPython,點(diǎn)擊OK
然后拷貝上面VS2010生成的COM組件ComToPython.dll至PyCharm ComToPython項(xiàng)目文件夾下:
編寫python調(diào)用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)
運(yùn)行代碼,執(zhí)行結(jié)果如下:
以上就是Python調(diào)用C# COM Dll整個(gè)過(guò)程了
這篇Python調(diào)用C# Com dll組件實(shí)戰(zhàn)教程就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
jupyter notebook 使用過(guò)程中python莫名崩潰的原因及解決方式
這篇文章主要介紹了jupyter notebook 使用過(guò)程中python莫名崩潰的原因及解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04pandas索引與賦值操作、排序以及Series排序和DataFrame排序方式
這篇文章主要介紹了pandas索引與賦值操作、排序以及Series排序和DataFrame排序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Django切換數(shù)據(jù)庫(kù)和遷移數(shù)據(jù)詳解
這篇文章主要介紹了Django切換數(shù)據(jù)庫(kù)和遷移數(shù)據(jù)詳解的相關(guān)資料,需要的朋友可以參考下2022-11-11python繞過(guò)圖片滑動(dòng)驗(yàn)證碼實(shí)現(xiàn)爬取PTA所有題目功能 附源碼
這篇文章主要介紹了python繞過(guò)圖片滑動(dòng)驗(yàn)證碼實(shí)現(xiàn)爬取PTA所有題目 附源碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01python實(shí)現(xiàn)馬耳可夫鏈算法實(shí)例分析
這篇文章主要介紹了python實(shí)現(xiàn)馬耳可夫鏈算法的方法,實(shí)例分析了馬耳可夫鏈算法的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-05-05思考分析Python運(yùn)算中?a+=b?和?a=a+b是否相等
這篇文章主要為大家介紹了Python運(yùn)算中a+=b和a=a+b是否相等及原理思考分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04使用Python創(chuàng)建簡(jiǎn)單的HTTP服務(wù)器的方法步驟
這篇文章主要介紹了使用Python創(chuàng)建簡(jiǎn)單的HTTP服務(wù)器的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04