郭振澳 2018-06-24 04:22 采纳率: 0%
浏览 1870
已结题

python编写com组件问题

背景: 我想用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条回答

  • threenewbee 2018-06-24 15:50
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误