python编写com组件问题 20C

背景: 我想用python编写一个com组件,然后在vbs中调用.

文件: PyHello.py文件

class PyHello(object):
    def __init__(self):
        pass

    def SayHello(self):
        return 'Hello Python!'

    def DoAdd(self, a, b):
        return a + b
class _WrapPyHello(PyHello):
    import pythoncom
    # _reg_clsid_ = '{4ae5ed1d-c378-4da1-9816-5a038112dlksdjfasio}'
    _reg_clsid_ = pythoncom.CreateGuid()
    _reg_progid_ = "Python.PyHello"
    _public_methods_ = ['SayHello','DoAdd']


if __name__=='__main__':
    import win32com.server.register
    win32com.server.register.UseCommandLine(_WrapPyHello)

setup.py文件

 from distutils.core import setup
import py2exe


setup(com_server=["PyHello"],
      zipfile = None,
      options = {
                    'py2exe' : {
                        "bundle_files": 1,
                       "dll_excludes": ["MSVCP90.dll","w9xpopen.exe"]
                    }
                }
)

如果直接运行 PyHello.py 之后,其实已经注册好了,已经可以用VBS调用了

VBS 代码:

 Set inst = CreateObject("Python.PyHello")
MsgBox "1111"
MsgBox inst.SayHello()
MsgBox inst.DoAdd(1,3)

现在的问题是,怎么把PyHello.py这个文件编译成dll, 然后在VBS中不依赖python的环境使用.

参考资料:
https://zhuanlan.zhihu.com/p/22023698?refer=python-dev
用这个帖子中的方法,我没有成功

其它资料:
https://www.oschina.net/code/snippet_91334_19994
https://blog.csdn.net/qiaokelinaicha/article/details/68921470
https://blog.csdn.net/DarkChampion/article/details/4420139

困扰好久了, 哪位大神熟悉python,请帮帮忙.

3个回答

python搞exe dll这种小众的方案基本不会出现在商业软件中,可靠性,适用性根本没有保障。为什么非要用python编写dll呢,你有独自一人研究这个的精力不如使用别的语言了。

u011513939
郭振澳 python的第三方库比较丰富, 我想封装一些东西,给其它语言调用
大约一年之前 回复

python的第三方库比较丰富, 我想封装一些东西,给其它语言调用

py2exe 2.7版本的可以

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于编写COM组件的问题
我是初学编写COM组件。看过一些资料,明白个大概。但是我不知道如何创建程序,就是在delphi7里创建COM组件的过程,非常急,请大家帮帮忙!谢谢!!!最好能给做个最简单的例子,比如说:就调一个函数,该函数返回一个整型的值。可以把例子(工程文件)发到我的邮箱 chen_zhuo_2003@126.comrn
编写COM组件
COM组建,MFC测试COM组建,ATL测试COM组建 http://blog.csdn.net/wangwenjing90/article/details/8772376
COM组件怎么编写?
写一个最简单的例子吧.谢了.
C#编写COM组件
C#编写COM组件  软件:Microsoft VisualStudio 2010 1、新建一个类库项目 2、将Class1.cs改为我们想要的名字(例如:MyClass.cs) 问是否同时给类改名,确定 3、修改Properties目录下面的AssemblyInfo.cs ComVisible属性设置为true 改成下图 4
COM组件的编写与注册
前言 “组件对象模型(英语:ComponentObjectModel,缩写COM)是微软的一套软件组件的二进制接口标准。这使得跨编程语言的进程间通信、动态对象创建成为可能。” 以上是维基百科对COM组件的定义,简单来说,C++编写的COM组件可以在C#、Delphi语言中使用,COM组件可以实现跨语言的操作,在COM中也分进程间和进程外通信,COM/DCOM 组件可以在DLL 或EXE 文...
vs2013编写COM组件
1.我们构建3个项目,分别是COM组建,MFC测试COM组建,ATL测试COM组建 2.具体的步骤参考 http://blog.csdn.net/wangwenjing90/article/details/8771934 3.源码 http://download.csdn.net/detail/u013571243/9288027 
关于COM组件的编写!
关于COM组件的编写!rn最近在看COM,说:如果要减少组件在网络间的快网络传输,就要将一些数据的传输放到方法中,通过调用方法,来实现得到数据(大量),用来减少跨网络传输数据rnrn问题:怎么实现,可以举一点例子吗?rnrn或者仅仅是声明这么一点
PB编写COM组件
请问:谁用PB做过COM组件,在WINDOWS SERVER 2003中怎样设置才能使客户端正常访问。
C#编写Com组件!!
一步一步教你实现C#编写Com组件。附件中有截图,能够很快的实现Com组件的编写。
c# 编写com组件
使用C#编写com组件,不完全手册,要注意的地方,vs2005下实现
关于编写COM组件。
若用COM封装查询功能,返回值是有RecordSet对象好还是用数组好?谁愿探讨一下?
编写可传递参数的COM组件
可以在嵌入COM组件的网页中传递启动参数给COM组件
C#编写COM组件示例
C#编写COM组件示例
C#.NET com组件的编写
C#.NET com组件的编写 设置工程属性:“生成”-> “为COM Interop注册”。 1 更改AssemblyInfo.cs……设置COM可见 1 建立源码 1 注册COM组件DLL 3 使用HTML中VBS脚本测试 3 提示不能创建 ACTIVEX 控件…… 4 提示找不到路径 4 ----作者Attilax , 1466519819@qq.com---
用JAVA编写COM组件
请问能使用JAVA(最好不是Visual J++)编写COM组件吗?如何编写?希望能指引方向,或直接提供答案。
COM组件编写和使用示例
代码原封不动摘自《COM技术内幕》,只不过从MAKEFILE转为vs2008实现。 vs2008包含两个工程:Com工程,创建Com组件; Client工程,使用Com组件 Client目录: 示例如何使用COM组件 Com目录: 示例如何创建COM组件 Debug目录: REGISTER.BAT 注册com组件 UnREGISTER.BAT 反注册Com组件 Client.exe示例如何使用Com组件 Cmpnt.dll手动编写的Com组件
使用C++编写com组件
学习com技术内幕后,终于捣鼓出一个com了,实现了idispath指针,可以在ASP中使用mysql,postgresql,sqlie3数据库了。放在这里备份。 我自己用的。请不要下载!
VC++编写COM组件教程
本教程的目的是告诉你如何使用ATL创建一个COM服务器,并使用Visual C++和Visual Basic程序来分别调用这个服务器。以及编写复杂的com组件
利用ATL编写COM组件
利用ATL编写COM组件,利用ATL编写COM组件,利用ATL编写COM组件,利用ATL编写COM组件
C#怎么编写com组件?
RT
delphi 编写的com 组件的兼容性问题。
现在项目中需要开发 一套 com 组件,开发小组里有熟悉 vb 和 delphi 两种语言的程序员。请问一下 delphi 开发的com 组件的兼容性是否存在问题,听技术部门经理说有兼容性问题。但一个delphi程序员说没有。rn由于我不太懂delphi ,特在此请教各位高手。rnrn说明,该组件主要进行数据库的交互。rn
如何编写自己的com组件?
我的意思是,类似于将特定函数导出为dll文件供以后使用,能不能导出自己的com组件?该如何实现?rn看了网上的一些资料,讲的都是如何利用已有的com组件来编程实现想要的功能。
PB编写COM组件传递结构问题
在用PB编写COM组件(不是调用别的语言写的COM)rn提供一个函数,比如clacpre入参两个 ref StructA A ,ref LONG Arn其中结构StructA是PBL中自写义的,在函数申明时直接输入进去的,但老是编译不过,不知道为什么?rn是否PB不支持在COM中结构传递?rn本人新人一名,多谢高人指点。
VBA调用C#编写的com组件问题?
在有.NET环境下的用C#编写的组件可以成功的注册,VBA能调用。rn将组件移到没有.NET的环境下(安装了framework2.0)组件注册成功,rn且能被引用,可以看到对象及其成员!rn但是在运行时报自动化错误!rn请教解决方法!
关于delphi的com组件编写问题!!
如何创建一个com组件?
关于MFC编写COM组件的问题
在使用MFC编写COM组件的过程中遇到两个问题,烦请论坛大大给予解惑:rnrn(1)添加的类可否拥有多个接口?rn(2)可否导出添加的类,即能否在客户端实例化该类?rnrn感谢每一位留言的大大O(∩_∩)O~
delphi调用vc编写的COM组件的问题
导入接口如下:rn ITCardClient = interface(IDispatch)rn ['BFDE4B00-A404-4A0A-8386-BAFE233D7124']rn procedure connect(var server_addr: shortint; port: Integer; var user_name: shortint;rn var password: shortint); safecall;rn function pay(systemID: Integer; var cardNO: Shortint; money: Integer; var billNO: Shortint): Integer; safecall;rn end;rnrn我调用的connect方法,server_addr是服务器的ip地址,请我该怎么传rn
ASP编写客户端程序调用COM组件的问题
1、用VC的ATL创建的普通组件rn用ASP调用组件的属性和方法,好像方法没有被执行,没有的到预期的返回值rn2、如果把组件改成用ATL提供的ActiveX Server Component创建,ASP中如何rn 调用组件的onstartpage()方法。
ALT编写的COM组件的参数类型问题
我想做把一个画图的程序段写成一个COM组件,要传递CDC类型的参数,但是编译时在IDL文件中出现错误如下:rnrnerror:expecting a type specification near xxxrnrn其他程序也遇到这种参数类型问题,看了以前的帖子说可以转换成long型的rnrn求教大神如何解决啊
Com组件调用Com组件的问题
现在有个 A.dll 这个Com组件已经注册, 现在我自己写了一个Com组件B.dll,用ATL向导做的, 现在我要在B里面写代码调用A里面的接口 请问怎么做?rnrn很着急啊! 最近老和COM组件打交道 快崩溃了!! 大家帮忙想想办法! 谢谢了
COM组件调用COM组件的问题
我现在有A组件和B组件,均是在VC6中创建的,A、B各有若干个接口。rn现在我想B中的调用A中的接口,我在B的idl文件中import了A的idl文件,以前是调用正常的,在vs2005中用C#写的demo调用也正常。rn最近我修改了A组件中某个接口的方法,增加了2个参数,然后重新编译A和B,在demo中调用时,只引用B组件,可是通过B组件查看A组件中的这个接口的方法,参数数量还是原来的数目,而不是增加了2个参数后的数量。rn可是如果我在demo中直接引用A组件,查看其接口时,发现是正确的,也就是参数数量是添加了2个之后的数量。rn还有,我在2005中创建组件,2005中调用,修改接口方法后,在demo中查看却是正常的。rnrn大家帮忙看下,我的问题在哪里?谢谢啦!
COM组件调用组件的问题
A和B两个组件,各有一个接口:IA1和IB1,其中IB1的一个方法Bfun的返回参数类型为IA1,也就是说IB1调用了IA1接口rn然后有一个C#写的调用组件的demornrndemo中,我只引用了B.dll,然后在调用IB1的方法Bfun时,需要返回一个IA1类型的参数,这个参数我通过B组件就可以声明了!这样是不是不对?rnrn问题有3个:rn1、demo中,如果只引用B.dll后,是不是只能看到B的接口,看不到A的接口?rn2、demo中,如果需要定义接口IA1,是不是必须要把A.dll引用进来,然后using ALib; 然后再声明一个接口对象?rn3、组件代码中,组件B在引用A的接口时,该如何引用呢?就是在B的idl文件中该如何写呢?rnrn多谢多谢啦!
com组件问题
一个com组件可以包括多个类,如果类A和类B多实现了同一个接口IC,那么,我们再调用IC接口里面的函数时,到底调用的是类A里面的函数还是类B里面的函数呢?
COM组件问题,请多多指教
我想做个组件 是 有关 对标准评定 以及对得出评定标准后,对结果进行绘图 的组件rnrn应该怎么做? 是将标准评定作为一个对象,将绘图作为一个对象么?rnrn还是 将 “标准评定 和绘图 作为一个对象”里面实现这两个功能呢?(前提是 标准 有很多,但是随着发展,标准的内容不可知,个数也不可知的)rnrn还有一种想法:把每个标准做成一个对象 里面均包含 “评定和绘图” 但是以后标准的个数又不可知,就是对象的个数也不可知,这种想法可以实现么?rnrn
COM组件的使用问题????????????
学生考试系统三个组件:rnEXAMrnQuestionInfornUserInforn然后又一个客户端程序:ClentExamrnrn这几个组件该怎么用?rn在网上搜的,说是先初始化,初始化COM库 --- AfxOleInit() ---在CApp::InitInstance()中实现rn然后我在客户端程序中:rn[code=C/C++]rnBOOL CClientExamApp::InitInstance()rnrn AfxOleInit();rn[/code]rnrn添加了这句话。rnrn2>引入ADO库定义文件 --- rnrn#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF","adoEOF")rnrn--- 写在stdafx.h中rn这句在三个组件中都有rnrn除了这些还有什么啊,
COM组件的问题
为什么我添加的COM组件在ASP.NET中的工具栏里面是灰色的,但是在Winform中能够正常使用,这两者有什么区别吗?拜托大家了!!!!
Com组件注册的问题
  组件的编译已经成功,但不知道为什么,没有自动注册,使用手动的命令:rnregsvr32 TestCom.dll提示:LoadLabrary("TestCom.dll")failed-找不到指定的模rn块。rn请问高手应当如何做才能完成手动注册呢?
com组件全局变量问题
com的多个实例公用一个全局变量,每个实例各自有自己的全局变量,这两种情况分别怎么定义?
注册COM组件的问题
我用VC编写了一个COM组件,在VB的开发环境下调用一切正常,可是用VB的打包程序打包以后,在个别计算机上安装的时候总是提示这个组件注册失败,安装也就失败了。是不是应该把组件打包发布呢?就象在VB中开发一个ActiveX DLL工程一样。
关于Com组件的问题
我正在做一个基于活动目录的管理软件,并将从目录中取用户信息部分封装成Com组件。每一个用户都包含许多属性(例如cn,displayName等),因此我将用户的每一个属性值存在自己创建的结构中,这样在枚举目录中所有用户时,使用CArray(头文件afxtempl.h)存储创建的结构,但是在编译时总是出错:fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include 如果我去掉头文件afxtempl.h,编译时又不认CArray数组类。rnrn我应该怎么办??? 像这种情况还有别的办法吗?rn rn谢谢!!!
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池