首頁 > 後端開發 > Python教學 > Python呼叫C# Com dll元件的過程詳解

Python呼叫C# Com dll元件的過程詳解

黄舟
發布: 2017-10-12 11:16:56
原創
3792 人瀏覽過

下面小編就為大家帶來一篇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=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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板