向COM/VBA公开Python类
我有一个简单的python类,我试图使com可访问(例如,VBA): 几个例子表明这是一种非常标准的方法(请参见和) 从python来看,这似乎是com可访问的。不会出现任何错误,输出将按预期显示:向COM/VBA公开Python类,python,vba,com,Python,Vba,Com,我有一个简单的python类,我试图使com可访问(例如,VBA): 几个例子表明这是一种非常标准的方法(请参见和) 从python来看,这似乎是com可访问的。不会出现任何错误,输出将按预期显示: from comtypes.client import CreateObject f = CreateObject('Foo.Application') f.say_hello('David') 但是,当尝试从VBA实例化Foo时,出现了一个错误(运行时错误-2147024770(8007007e
from comtypes.client import CreateObject
f = CreateObject('Foo.Application')
f.say_hello('David')
但是,当尝试从VBA实例化Foo
时,出现了一个错误(运行时错误-2147024770(8007007e)自动错误,无法找到指定的模块)
Dim f作为对象
Set f=CreateObject(“Foo.Application”)
我实际上能够使用(和)中描述的方法解决此错误,具体操作如下:
_reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER
然后在名称保护函数中使用localserver.service({602462c5-e750-4d1c-879b-a0465bebb526})
然而,在过去的一些应用程序开发工作中(很久以前使用Python2.7),我知道我们没有做这部分工作——而是使用Innosetup从foo.exe
和foo.dll
(源自foo.py
可能来自py2exe或类似版本)和其他依赖项编译安装程序
我对这个解决方案很满意(目前),但我想我的问题是,这是否是必要的(因为有几个例子不能做到这些),或者我是否还缺少其他东西(例如,我在前世使用的安装程序实际上是在幕后用DLL而不是.py文件处理这一点?)
附加信息:操作系统是64位Windows,运行Excel 2013(32位)和python 3.7.4(32位)
_reg_clsctx_ = pythoncom.CLSCTX_LOCAL_SERVER