>  기사  >  백엔드 개발  >  Python으로 C# Com dll 구성요소를 호출하는 과정에 대한 자세한 설명

Python으로 C# Com dll 구성요소를 호출하는 과정에 대한 자세한 설명

黄舟
黄舟원래의
2017-10-12 11:16:563746검색

아래 편집기는 Python에서 C# Com dll 구성 요소를 호출하는 방법에 대한 실용적인 튜토리얼을 제공합니다. 편집자님이 꽤 좋다고 생각하셔서 지금 공유하고 모두에게 참고용으로 드리도록 하겠습니다. 에디터 따라가서 살펴볼까요

회사에서 예전에 C# AES 암호화 및 복호화 솔루션을 보유하고 있었는데, 솔루션 암호화에서는 AES의 4가지 모드(ECB, CBC, CFB, OFB, 이 4가지 모드) 대신 Rijndael 클래스를 사용했습니다. RijndaelManaged 클래스가 사용됨), Python의 암호화 라이브러리 AES에는 이 네 가지 모드만 있고 C# AES Rijndael 클래스 암호화 효과는 Python에서 얻을 수 없습니다.

C#에서는 구현할 수 있지만 Python에서는 구현할 수 없는 기능과 유사하게 정보를 수집하는 방법에는 두 가지가 있습니다. 첫 번째 방법은 IronPython을 사용하여 C# dll 파일을 직접 호출하는 것입니다. 이 방법에는 단점이 있습니다. Python 대신 ironPython을 사용하며 .net 프레임워크 라이브러리의 일부 Python 버전만 통합하고 업데이트 및 유지 관리가 덜 필요합니다. 소스 코드를 Com 구성 요소로 변환한 다음 Python이 COM 구성 요소 Dll 메서드를 호출합니다.

인터넷에는 COM dll 호출에 대한 Python 튜토리얼이 많이 있지만 대부분은 C 또는 C++로 작성된 dll입니다. 호출 프로세스에 대한 COM 구성 요소 생성에 대한 포괄적인 설명은 거의 없습니다. COM 구성 요소를 며칠간 탐색한 경험을 바탕으로 Python을 사용하여 COM dll 구성 요소를 호출하는 방법을 모든 사람과 공유합니다.

저도 초보입니다... ^ ^ 전문가님들 지나가주세요. 혹시 제가 쓴 내용에 잘못된 부분이 있으면 양해해주시고 정정해주세요...

1.생성방법 C# COM 구성 요소

저는 Microsoft Visual Studio 2010을 사용합니다. 먼저 새 프로젝트를 만들고 [클래스 라이브러리]를 선택하고 이름을 사용자 정의합니다: ComToPython을 클릭하고 [확인]을 클릭합니다.

이름을 바꿉니다. cs 파일: ComToPython.cs, 사용자 정의 가능. 팝업 창에서 [예]

를 선택합니다. COM 가시성을 True로 설정합니다:

위는 다음 프로젝트 속성 설정과 동일합니다.

"COM interop에 등록"을 선택합니다. :

새 서명 ComToPythonKey를 생성하고 "비밀번호를 사용하여 키 파일 보호"를 선택 취소합니다.

인터페이스 클래스 IMyClass를 작성하면 ComToPython 클래스가 인터페이스의 세 가지 메서드를 구현합니다. () 메소드는 우리가 구현하려는 함수이며 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를 복사합니다.

마지막으로 F6이 솔루션을 컴파일하고 생성합니다. ComToPython.dll이 프로젝트의 디버그 디렉터리에 생성됩니다.

마지막 단계는 COM 구성 요소를 시스템

시작 메뉴--CMD 명령 창과 함께 제공되는 VS 2010 열기(관리자 권한) ComToPython.dll 폴더 찾기

실행: gacutil /i ComToPython.dll 전역 캐시에 dll 추가

실행: regasmComToPython.dll 등록 dll을 시스템에

2 .Python

How to call

COM dllcomComponentPython 2.7, PyCharm 2017.1 for IDE, PyCharm new - 프로젝트 ComToPy thon, 새 프로젝트 py 파일 ComToPython.py 설정 - 두 개의 종속 라이브러리 추가:

COM 구성 요소를 호출하는 후자의 두 가지 방법에 해당하도록 pywin32 및 comtypes 종속 라이브러리를 추가하고 설치합니다.

종속성이 설치된 후 다음 작업이 수행됩니다. Python 설치 디렉터리의 site-packages 디렉터리에 있어야 합니다. C:Python27Libsite-packageswin32comclient

ComToPython에서 makepy.py를 두 번 클릭하고 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.