郭振澳 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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。