Explication détaillée du processus d'appel du composant DLL C# Com par Python

黄舟
Libérer: 2017-10-12 11:16:56
original
3682 Les gens l'ont consulté

L'éditeur suivant vous proposera un tutoriel pratique sur l'appel de composants dll C# Com depuis Python. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'œil

Auparavant, la société disposait d'une solution de chiffrement et de déchiffrement C# AES, mais la solution utilisait la classe Rijndael pour le chiffrement au lieu des quatre modes d'AES (ECB, CBC, CFB, OFB. Ces quatre utilisent la classe RijndaelManaged), et la bibliothèque Crypto AES sous Python n'a que ces quatre modes, et l'effet de chiffrement de la classe C# AES Rijndael ne peut pas être obtenu sous Python.

Semblable à ce type de fonction qui peut être réalisée en C# mais ne peut pas être implémentée en Python, il existe deux solutions pour collecter des informations. La première consiste à utiliser IronPython pour appeler directement le fichier dll C#. de nombreux tutoriels sur Internet, je n'entrerai donc pas dans les détails. Oui, cette méthode a un inconvénient. Elle utilise ironPython au lieu de Python. Elle intègre simplement certaines versions Python de la bibliothèque framework .net, ce qui nécessite moins de mises à jour et de maintenance. La deuxième méthode consiste à compiler le code source de la DLL C# dans un composant Com, puis à l'appeler à partir des méthodes Python de la Dll du composant COM.

Il existe de nombreux didacticiels Python sur l'appel de DLL COM sur Internet, mais la plupart d'entre eux sont des DLL écrites en C ou C++. Il existe peu d'explications complètes sur la génération de composants COM pour le processus d'appel. résumé basé sur ma propre expérience d'exploration pendant plusieurs jours. Présentez comment générer des composants COM et comment appeler des composants COM dll à l'aide de Python. Partagez-les avec tout le monde.

Je suis aussi novice... ^ ^, experts, passez par là s'il y a quelque chose qui ne va pas dans ce que j'ai écrit, pardonnez-moi et corrigez-moi...

1 .Comment générer un composant C# COM

J'utilise Microsoft Visual Studio 2010, d'abord créez un nouveau projet --Sélectionnez [Class Library], personnalisez le nom : ComToPython, cliquez sur [OK]

pour renommer le fichier cs : ComToPython.cs, qui peut être personnalisé. Dans la fenêtre contextuelle, sélectionnez [Oui]

La visibilité COM est définie sur True :

Ce qui précède est équivalent aux paramètres de propriété de projet suivants :

Cochez "S'inscrire à COM Interop" :

Créer un nouveau signature ComToPythonKey et décochez "Utiliser le fichier de clé protégé par mot de passe"

Écrivez la classe d'interface IMyClass, et la classe ComToPython implémente les trois méthodes de l'interface Par exemple, Add(. ) est la fonction que nous voulons implémenter et renvoie a et b.

Il doit y avoir [ClassInterface(ClassInterfaceType.None)] avant la classe ComToPython, sinon une erreur sera signalée lors de l'appel de Python.

[ProgId("ComToPython.Application")] spécifie le nom lorsque Python appelle COM, qui sera vu dans le code Python suivant.


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;
    }
  }
}
Copier après la connexion
Le GUID est généré à l'aide de l'outil fourni avec VS2010 Outil - Créer un GUID, cliquez pour copier les deux GUID et placez-les avant les deux noms de classe <🎜. >

Remarque : cliquez sur Nouveau GUID pour copier le GUID nouvellement créé :

Enfin, F6 compile pour générer la solution, et le débogue dans votre projet. ComToPython.dll sera généré dans le répertoire :

La dernière étape consiste à enregistrer le composant COM dans le système

Démarrer menu - ouvrez la fenêtre de commande CMD fournie avec VS 2010 (privilèges d'administrateur) Localisez le dossier ComToPython.dll

Exécutez : gacutil /i ComToPython.dll Ajoutez la dll au cache global

Exécutez : regasmComToPython.dll Enregistrez la dll dans le système

2 Comment appeler PythonCOM. dllcomposantJ'utilise Python 2.7, PyCharm 2017.1 pour IDE, PyCharm nouveau - projet ComToPython, nouveau fichier py du projet ComToPython.py

Paramètres - ajoutez deux bibliothèques dépendantes :

Ajoutez et installez les bibliothèques de dépendances pywin32 et comtypes pour correspondre aux deux dernières façons d'appeler les composants COM :

Une fois les dépendances installées, il y aura un dossier win32com dans le répertoire site-packages du répertoire d'installation de Python Double-cliquez sur makepy.py

sous C:Python27Libsite-packageswin32comclient, sélectionnez ComToPython et cliquez sur 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(&#39;ComToPython.Application&#39;)
result = dll.Add(a, b)
print "a + b = " + str(result)
Copier après la connexion

运行代码,执行结果如下:

以上就是Python调用C# COM Dll整个过程了

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!