Python調用C# Com dll組件實戰教程,

來源:互聯網
上載者:User

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使用VS2010內建工具產生,工具--建立GUID,點擊複製兩個GUID分別放至兩個類名之前

註:點擊建立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=1b=2print "方法一:"from win32com.client import Dispatchdll = Dispatch("ComToPython.Application")result = dll.Add(a, b)print "a + b = " + str(result)print "方法二:"import comtypes.clientdll = comtypes.client.CreateObject('ComToPython.Application')result = dll.Add(a, b)print "a + b = " + str(result)

運行代碼,執行結果如下:

以上就是Python調用C# COM Dll整個過程了

這篇Python調用C# Com dll組件實戰教程就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援幫客之家。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.