当前位置:主页 > python教程 > Python调用C# Com dll组件实战教程

Python调用C# Com dll组件的方法详解

发布:2020-01-05 11:06:43 136


我们帮大家精选了Python调用C#组件相关的编程文章,网友王芮佳根据主题投稿了本篇教程内容,涉及到Python、C#、dll组件、Python调用C# Com dll组件实战教程相关内容,已被387网友关注,涉猎到的知识点内容可以在下方电子书获得。

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,点击【确定】

Python调用C# Com dll组件实战教程

重命名cs文件:ComToPython.cs,可自定义。 弹窗选择【是】

Python调用C# Com dll组件实战教程

COM可见性设置为 True:

Python调用C# Com dll组件实战教程

上面等同于以下项目属性设置:

Python调用C# Com dll组件实战教程

勾选“为COM互操作注册”:

Python调用C# Com dll组件实战教程

新建签名ComToPythonKey,取消勾选 “使用密码保护密钥文件”

Python调用C# Com dll组件实战教程

编写接口类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分别放至两个类名之前

Python调用C# Com dll组件实战教程

注:点击新建GUID,可复制新建后的GUID:

Python调用C# Com dll组件实战教程

最后F6编译生成解决方案,在你的工程Debug目录下会有ComToPython.dll生成:

Python调用C# Com dll组件实战教程

最后一步注册COM组件至系统

开始菜单--打开VS 2010 自带CMD命令窗口(管理员权限)定位至ComToPython.dll文件夹下

执行:gacutil /i ComToPython.dll 添加dll至全局缓存

执行:regasmComToPython.dll 注册dll至系统

Python调用C# Com dll组件实战教程

2.Python如何调用COM dll组件

我用的是Python 2.7,IDE用的PyCharm 2017.1,PyCharm新建--项目ComToPython,新建项目py文件ComToPython.py

设置--添加两个依赖库:

Python调用C# Com dll组件实战教程

添加安装pywin32和comtypes依赖库,以对应后面的两种调用COM组件方式:

Python调用C# Com dll组件实战教程

依赖装好后,Python安装目录site-packages目录下会有个win32com文件夹,双击C:\Python27\Lib\site-packages\win32com\client\下的makepy.py

选择ComToPython,点击OK

Python调用C# Com dll组件实战教程

然后拷贝上面VS2010生成的COM组件ComToPython.dll至PyCharm ComToPython项目文件夹下:

Python调用C# Com dll组件实战教程

编写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整个过程了

这篇Python调用C# Com dll组件实战教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。


参考资料

相关文章

  • Python设计模式中抽象工厂模式原理和用法

    发布:2019-06-20

    这篇文章主要介绍了Python设计模式之抽象工厂模式,简单讲述了抽象工厂模式的概念、原理并结合实例形式分析了Python实现与使用抽象工厂模式的相关操作技巧,需要的朋友可以参考下


  • Python Flask 实现 HTML 文件压缩案例代码(9 级压缩)

    发布:2023-04-29

    这篇文章主要介绍了Python Flask 实现 HTML 文件压缩案例代码(9 级压缩),本案例是基于 Python Flask 进行搭建,所以需要提前搭建一个 Flask 项目环境,有 app.py 文件和 templates/index.html 文件即可,需要的朋友可以参考下


  • Python之lxml安装失败的解决

    发布:2023-03-29

    这篇文章主要介绍了Python之lxml安装失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


  • python截取两个单词之间的内容代码详解

    发布:2020-02-08

    今天小编就为大家分享一篇python截取两个单词之间的内容方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


  • Python3+django2.0+apache2+ubuntu14部署网站上线的方法

    Python3+django2.0+apache2+ubuntu14部署网站上线的方法

    发布:2022-06-23

    为网友们分享了关于Python3的教程,这篇文章主要介绍了Python3+django2.0+apache2+ubuntu14部署网站上线的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧


  • python中time模块指定格式时间字符串转为时间戳

    发布:2023-03-24

    本文主要介绍了python中time模块指定格式时间字符串转为时间戳,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • python实现断点调试的方法

    发布:2023-03-28

    本文主要介绍了python实现断点调试的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • Python实现插入排序算法示例效果

    发布:2020-01-27

    这篇文章主要介绍了Python实现的直接插入排序算法,结合实例形式分析了Python直接插入排序算法的定义与使用相关操作技巧,代码备有较为详尽的注释便于理解,需要的朋友可以参考下


网友讨论