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,请帮帮忙.

1

3个回答

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

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

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

0

py2exe 2.7版本的可以

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
利用ATL编写COM组件
利用ATL编写COM组件,利用ATL编写COM组件,利用ATL编写COM组件,利用ATL编写COM组件
Windows下使用Python调用com组件
1、下载pywin32 下载地址:点击下载 根据Python版本号下载对应的版本,注意:这里的32位和64位指的是Python,而不是操作系统。 安装过程中会检测本机已安装的Python,如果找不到,就是pywin32的版本下错了。 安装完成后,会在Python的根目录下的/Lib/site-packages/下生成win32、win32com和win32comext三个文件夹。里面都有De
python中使用Com组件说明
使用COM文件中的Client中的makepy.py生成COM组件库对话框,双击生成相应的文件 调用 时如下 以前弄了好几天不成功,重装系统后这么容易就成功了。以前在浪费时间吗 from win32com.client import DispatchBaseClassfrom win32com import clientdef GetDBString(): a1
python调用windows下的com组件
最近弄com,测试用js 或者c++、c#等,感觉很不方便,一来是需要编译,二来c++之流还要引用库,很不爽,于是用 python搞了一把,发现很容易,写完就可以立马运行,随时可以修改。记录于此,以后备用。 首先到https://pypi.python.org/pypi/comtypes,下载comtypes,国外地址访问有点慢,我下了一个放华为网盘备用了,地址为http://dl.vmall.
c# 进程内com组件实现
一.com组件编写    1.打开VS2013创建一个项目        2.设置项目属性    添加签名   3.编写开放接口和方法 ,添加类文件Main.csusing System; namespace MyComIn { public interface MyInterface { int add(int a, int b); } pub...
Python模块学习——pythoncom模块
PythonWin32应该是提供了访问win32 api的能力 pythoncom提供了使用windows com组件的能力。具体能用来做什么,由你是用的com决定,你可以搜索com组件相关的资料。 1、Win32顾名思义就是MS的Windows应用,针对Windows平台对Python做的扩展,和其它Python的本地化扩展类似,ActivePython的发行版貌似提供有这个; 2、C
ATL实现com接口
1、C++描述com接口的形式: 例如: class IMath:public IUnknown { public: virtual long Add(long para1,long para2); virtual long Subtract(long para1,long para2); }; class IAdvancedMath:public IUnknow...
如何用VB6写COM组件
   所幸的是,我们可以用COM组件来在最大程度上扩展ASP的功能。你可知道,任何可以用诸如VB,VC和VJ以及其它的一些程序语言所写出来的东西,都可以被应用到你的网站的开发中去,这就是COM(组件对象模型)。COM能够用来编写能够被ASP所调用的对象。当在VB等编程环境中完成了组件的编制后,就可以放在ASP页面中被ASP所调用了。在这篇文章中,我们将看到如何使用VB6来编写一个COM对象,如何将
Delphi 编写COM+组件的知识和样例
一、COM组件的基础知识介绍: 1、什么是COM          COM是微软定的一种组件编写的规范,目的是为了实现组件的重用,不管你是用C、DELPHI、VB什么语言写的,只要遵守这种规范就是COM组件,就能相互之间调用。那这个规范是什么呢,最简单的,就是按规定使用接口,微软定了个IUnkown接口,只要实现了这个接口的类,就可以称为COM组件。在此基础上可以加上自己的接口,实现特
C++ COM组件的编写
COM组件的编写         本文提供一个完全用C++实现的进程内(DLL)COM服务器,不要ATL或MFC提供任何支持。用这种方式编写COM对象可以让你深入地洞察到COM处 理进程内服务器的方法以及COM是如何创建类工厂的。利用本文提供的这个简单框架你可以实现很基本的COM组件,如外壳扩展(Shell Extensions)等。如果你在使用过程中发现了任何问题,请将它反馈到vckb
WIN32 COM组件 的实现及注册
通过一个简单的组件实现两个接口,CoCreateInstance 调用 DLLGetClassObject返回相应的组件类厂 类厂调用CreateInstance创建组件 用DLLRegisterServer向注册表中加一个组件ID,前提是要对注册表中CLSID下的结构有一定的基础。
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---
COM组件的编写与注册
前言 “组件对象模型(英语:Component Object Model,缩写COM)是微软的一套软件组件的二进制接口标准。这使得跨编程语言的进程间通信、动态对象创建成为可能。” 以上是维基百科对COM组件的定义,简单来说,C++编写的COM组件可以在C#、Delphi语言中使用,COM组件可以实现跨语言的操作,在COM中也分进程间和进程外通信,COM/DCOM 组件可以在DLL 或EXE 文...
用C编写COM(一)
原文:http://www.codeproject.com/Articles/13601/COM-in-plain-C         如何在不使用MFC、ATL、WTL或其他框架下使用标准C来创建和使用COM组件         下载例程-17.6kb 内容:     简介    COM 对象和虚表    GUID    QueryInterface(), AddRef(),
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 
使用Delphi编写COM组件
第一章 在Delphi中使用接口 1.1 定义接口: 目的:什么是接口,以及和抽象类的关联以及不同点。 抽象类(备注理解接口最简单的方法) 永远不能创建一个抽象类的实例; 本身不能实现功能,依靠派生类实现; 接口 被申明为interface类型。接口名从字母I开始。类类型名从T开始。 所有的接口从IUnknown继承; 不能创建接口实例; 不能在接口中指定范围指示。所有的方法都是公有型(pub
COM组件编程中的金典问题
COM组件编程中的金典问题 COM组件编程中的金典问题 COM组件编程中的金典问题 COM组件编程中的金典问题
C语言实现COM组件
简单使用纯C语言实现COM组件,帮助理解COM实现机制
创建COM组件全过程(C++)
一:创建一个接口         typedef struct Interface Interface ISimpleMsgBox : public IUnknown { // IUnknown STDMETHOD_(ULONG, AddRef)() PURE; STDMETHOD_(ULONG, Release)() PURE; STDM
MFC写COM组件
MFC写COM组件 一:新建组件工程 工程名称COM     二:选择 动态链接库使用共享MFC DLL 和自动复选框   三:直接确定     四:查看自动生成代码信息 一个CCOMApp类,有成员函数CCOMApp和InitInstance函数 全局函数DllCanUnloadNow、DllGetClassObject、DllRegisterServ
VC-COM组件
做VC开发人员对com组件多少都有一定的认识,可是真有这样的实战经验的却不多,我就把自己学习Com的过程记录下来。由于目前篇幅不定所以我会以文字加附件代码的形式提供出来以供大家参考学习。 定义:COM组建是一组可以执行的二进制代码,通过接口方式为其他软件,系统或者组件提供相关服务。 二进制我们知道DLL    EXE    所以我们的COM 也可能是DLL或EXE 但和他们本质区别是:动态库要...
C++纯手工打造COM:COM之来龙去脉——组件如何被创建
本文意旨帮助初涉COM的学者能对COM组件的创建过程有一个清晰的了解。全文以《COM技术内幕》第7章的示例代码为蓝本,稍做修改之后进行详细介绍。如果你也阅读过此书的相关内容,那么理解起来将会更容易。 《COM技术内幕》这本书的示例代码编写于1996年。时至今日,编译器发生了或多或少的变化,将本书作者编写的代码重新组织到Visual studio 2008中并成功编译,对于当时刚接触COM的我
12.编写COM进程外组件
相比进程内组件,进程外组件的编写较为麻烦,在前面已经讲的IDL和进程外组件原理基础上,本节以一个简单实例讲解进程外组件的编写步骤和注意事项。
C#如何编写调用COM组件的程序
VS C#.net如何编写调用COM组件的程序? 请给出一个开发过程的例子. 我引用了一个MS 的Rich Edit的Com组件,在WebForm1.aspx中却没有该组件的名称,我给组件一个Id(RichEdit1),还是无法应用,请高手指点. 谢谢! --------------------------------------------------------------- 首先感谢您使
Python使用COM组件操作Excel
原文来自:https://www.cnblogs.com/jasonli-01/articles/6612020.html 做了小部分修改,比如原文中使用win32com.client.Dispatch,这个是在一个进程中操作Excel,如果正在编辑一个Excel,又在运行这段代码,会有一定的影响。 所以我修改成了win32com.client.DispatchEx,这表示重新创建一个进程,并...
QT调用Delphi生成的COM组件
    COM(Component Object Model),是微软的一种组件对象模型,ActiveX、DirectX以及OLE等都是基于COM建立起来的,它是开发软件组件的一种方法,多个COM组件对象可以连接起来以形成应用程序或组件系统,并且组件可以在运行时、在不重新链接或编译应用程序的情况下被卸载或替换,因此,具有很大的灵活性。    在COM中,接口就是一切,它完全与语言无关,只要它遵循接...
如何使用VB编写Excel的COM组件
1 新建工程中选择"外接程序",点击打开之后右侧的属性窗口即显示为MyAddIn工程。(注意如果你使用的是VB精简版的没有"外接程序"的选项,请下载完整版的)  2 右击MyAddIn,点击MyAddIn属性,你可以修改工程名称(暂时不需要修改别的东西),点击确定  3 展开窗体文件夹,右击frmAddIn,点击移除frmAddIn,结果只剩下设计器(里面有一个Conn
用C#编写一个进程外的COM组件
我在以前的一篇文章《COM互操作 - 在VB 脚本里面使用.NET类型》里面写过如何在COM客户端程序里面使用.NET组件,但是这些.NET组件都属于进程内的组件,即COM客户端需要将CLR和.NET组件都加载进自身进程的内存空间里面才能使用。上一次在MSDN中文论坛上看到有网友问如何使用C#编写一个进程外的COM组件,由于在使用regasm.exe注册.NET组件的时候,regasm.exe将.
VBS调用ATL编写的COM组件
参考文章:http://blog.csdn.net/collin1211/article/details/1864624 不使用连接点,而是使用属性来处理事件回调。 IDL文件 import "oaidl.idl"; import "ocidl.idl"; [ object, uuid(7E153966-BF67-4F02-BE64-80CB780A2EEF), dual, n
如何使用C++创建COM组件(ATL项目)
使用C++新建ATL项目,并实现调试测试。
一个最简单的com组件的例子(C++)
一个最简单的com组件的例子:)定义了两个纯抽象基类Ix,Iy来做为组件的接口,然后定义组件CA来继承这两个接口,做为CA的多接口实现,然后在一个客户端显示了对此组件多接口的调用。#include#includevoid trace1(const char* pMsg){cout//first interface;interface Ix{ virtual void _stdcall Fx1()=
【PB】pb9中COM的创建和调用
创建方法:   1, 创建一个workspace   2, 在workspace下创建一个application ( 假设名字为:myapp)   3, 创建custom class, 在custom class 中可以创建 function   4, 创建 project    要选择 COM/MTS/COM+ Component Wizard    填写 Project 名
爬虫+COM组件实现Excel操作自动化(python3.6)
在本文的代码中,python通过调用Windows系统下的COM组件,实现对Excel的自动化操作,并且操作是可视的!你可以清楚地看到pyhon在Excel中所有操作。python+COM组件可以实现在VBA中所有能做的事情,包括调用Excel函数。在使用方式上,python和VBA大同小异,在一些细节上会有些差异。比如,代码调用了一个Excel函数来获取当前表格内的行数,可以看到其调用形式与VB...
vs将普通工程修改为com组件工程
vs将普通工程修改为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组件
COM组件开发实践(三)【转】
前面 两 篇文章分 别 介 绍 了 MFC ActiveX 应 用程序和使用 ATL 开发 ActiveX 的 简单实 例,但 还 有 两个问题 需要解 决 : 1 ) 标记 ActiveX 控件 为 安全的控件 2) 对 控件 进 行 数 字 签 名。本文 将结 合 这两 点 进 行 简单 的介 绍...
PB中如何编写COM和COM+程序.
    COM/COM+作为取代OLE的一种新技术,问世已经很久了,PB7中也早已提供了对它的支持,不过从现实情况上看,似乎大家使用到的不是很多,其实对于新一代的互联网应用,它还是能够发挥很大作用.下面我将从COM/COM+组件的生成,调用,以及应用范围上谈谈我的看法和心得.          我将用PB10为开发工具做说明.假设要做一个表达式计算的COM组件,我想这个例子比较典型,用到了data...
Office COM组件--写Word的小程序
今天本是周末,回到家,父母已经准备好吃的,很幸福,但一看Yuki还很忙,原来是在做一个很繁琐的工作,将一个1600行的Excel表信息整理为Word文档,FT,这不废了吗,每个30秒都得10多个小时,这叫什么事啊,为了减轻其工作量,我说这个事交给我吧。   于是按此做了一个程序 1.将Excel表导入数据库中; 2.将Excel表数据读出,每一条按照规定格式写入Word文档   具体为
基于MFC下的COM组件开发-Helloworld
Step by Step: 基于MFC下的COM组件开发-Helloworld 示例代码
C# COM组件开发之界面窗体
C# COM组件开发,我们这里将讲到的是界面窗体的开发。将从定义接口开始,再讲类的实现以及用Regasm 工具进行注册等等,希望对大家有所帮助。 C# COM组件开发1,定义接口 (1)在接口上方加上[Guid("1EA4DBF0-3C3B-11CF-810C-00AA00389B71")] (2)在每个方法上加上[DispId(i)] using System;  using Syste
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 python编写实例教程 python编写网站教程