您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Python调用C# Com dll组件的过程详解

2025/10/25 3:56:08发布26次查看
下面小编就为大家带来一篇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组件的过程详解的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product