ホームページ >バックエンド開発 >Python チュートリアル >PythonでC# Com dllコンポーネントを呼び出す処理の詳細説明

PythonでC# Com dllコンポーネントを呼び出す処理の詳細説明

黄舟
黄舟オリジナル
2017-10-12 11:16:563784ブラウズ

以下のエディターは、Python から C# Com dll コンポーネントを呼び出すための実践的なチュートリアルを提供します。編集者はこれがとても良いと思ったので、参考として共有します。編集者をフォローして見てみましょう

同社は以前 C# AES 暗号化および復号化ソリューションを持っていましたが、ソリューションの暗号化では AES の 4 つのモード (ECB、CBC、CFB、OFB、これら 4 つは使用されるのは RijndaelManaged クラスです)、Python の暗号ライブラリ AES にはこれら 4 つのモードしかなく、C# AES Rijndael クラスの暗号化効果は Python では実現できません。

C# では実現できるが Python では実装できない機能と同様に、情報を収集するには 2 つの解決策があります。1 つは、IronPython を使用して C# dll ファイルを直接呼び出す方法です。インターネット上には多くのチュートリアルがあります。この方法には欠点があり、Python の代わりに IronPython を使用します。統合されるのは .net フレームワーク ライブラリの一部だけであり、2 番目の方法は C# DLL をコンパイルする必要があります。ソース コードを Com コンポーネントに読み込むと、Python が COM コンポーネントの Dll メソッドを呼び出します。

COM DLL の呼び出しに関する Python チュートリアルはインターネット上に多数ありますが、それらのほとんどは C または C++ で書かれた DLL です。COM コンポーネントの生成から呼び出しプロセスまでの包括的な説明はほとんどありません。 ここでは、生成方法について簡単に説明します。 COM コンポーネントを何日も探索した経験に基づいて、Python を使用して COM dll コンポーネントを呼び出す方法を皆さんと共有します。

私も初心者です...^ ^、専門家の方はスルーしてください。私が書いたものに何か間違っている場合は、ご容赦ください、修正してください...

1.の生成方法。 C# COMコンポーネント

私はMicrosoft Visual Studio 2010を使用しています。まず、新しいプロジェクトを作成し、[クラスライブラリ]を選択し、名前をComToPythonにカスタマイズして[OK]をクリックします

名前を変更しますcs ファイル: ComToPython.cs、カスタマイズ可能。 ポップアップ ウィンドウで [はい] を選択します

COM の可視性を True に設定します:

上記は、次のプロジェクト プロパティ設定と同等です:

[COM 相互運用に登録する] をチェックします。 :

新しい署名 ComToPythonKey を作成し、「パスワードを使用してキー ファイルを保護する」のチェックを外します

インターフェイス クラス IMyClass を作成します。ComToPython クラスは、たとえば、Add インターフェイスの 3 つのメソッドを実装します。 () メソッドは実装したい関数で、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 の作成をクリックしてコピーし、2 つのクラス名の前に配置します。新しく作成した 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、PyCharm 2017.1 for IDE、PyCharm new - プロジェクト ComToPython、プロジェクトのpyファイルComToPython.py 設定 - 2 つの依存ライブラリを追加します: COM コンポーネントを呼び出す後者の 2 つの方法に対応する pywin32 および comtypes 依存ライブラリを追加してインストールします:

依存関係がインストールされると、 Python インストール ディレクトリの site-packages ディレクトリ内のディレクトリで、C:Python27Libsite-packageswin32comclient の下の 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。