python开发com组件_python编写的com组件在其他编程语言中无法创建的问题以及R6034问题...

使用python编写一个com组件,在python中可以通过win32com.client.Dispatch来创建和调用方法,但是无法使用vb、vba等其他工具访问,错误代码8007007e,错误消息是automation错误,无法创建activex部件。

经过反复研究和网上查找,学习,发现,关键是少了一句话:

_reg_clsctx_ =

pythoncom.CLSCTX_LOCAL_SERVER

分析后,估计是这样:如果不写这句的话,系统会默认使用进程内组件的方式启动,即使用pythoncom27.dll来启动,但是这种方式在我的机器上有问题,写了这句,系统会使用python.exe来启动程序,就没问题了。至于pythoncom27.dll有什么问题,还真是费劲啊。

经过不断的探索,终于发现,这个问题我竟然已经处理过,当时是因为com组件发生R6034错误。那时,系统还能找到msvcr90.dll,只是版本不对,现在,根本找不到msvcr90.dll,用pythoncom27.dll根本启动不了。那么想要python27编写的com组件正常运行,就必须确保系统能找到msvcr90.dll,并且通过manifest指出正确的依赖版本才行。。。似乎我现在成了这个问题的专家了。。。。

那么,这个问题是否只能如此麻烦,如此郁闷呢,非也。如果你出现这个问题,那你一定用的是旧版的pywin32,在pywin32最新版217版中,已经解决了这个问题。它的方法是使用一个pythoncomloader27.dll作为过渡,而这个pythoncomloader27.dll中指明的需要的msvcr90.dll的版本,至此,此问题终于完美解决。

样例如下:

import pythoncom

class PythonUtilities:

_reg_clsctx_

= pythoncom.CLSCTX_LOCAL_SERVER

_public_methods_ = [ 'SplitString' ]

_reg_progid_

= "PythonDemos.Utilities"

# NEVER copy

the following ID

# Use "print

pythoncom.CreateGuid()" to make a new one.

_reg_clsid_

= "{41E24E95-D45A-11D2-852C-204C4F4F5020}"

def

SplitString(self, val, item=None):

import string

if item != None: item = str(item)

return string.split(str(val), item)

# Add code so that when this script is run by

# Python.exe, it self-registers.

if __name__=='__main__':

print

"Registering COM server"

import

win32com.server.register

win32com.server.register.UseCommandLine(PythonUtilities)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值