Python编写的com组件发生R6034错误的原因与解决办法

yipeiwu_com6年前Python基础
解决该问题的方法可以为调用本程序的exe文件建立一个合适的manifest文件,指定正确的msvcr90.dll版本即可,具体可参照/post/35219.htm

ps:可以使用mt.exe进行导出或合并manifest资源到exe或者dll文件。

查看manifest的方法:mt -inputresource:pythoncom27.dll;#2 -out:sss.txt

合并manifest到dll的方法:

mt.exe –manifest MyApp.exe.manifest -outputresource:MyApp.exe;1

or

mt.exe –manifest MyLibrary.dll.manifest -outputresource:MyLibrary.dll;2

(1 for an EXE, 2 for a DLL.)

ps:2010.12.24

如果是使用c++开发dll,那么使用libcmtd.lib或者libcmt.lib 替换掉 msvcrtd.lib 或 msvcrtd.lib也可以避免这个问题。

ps:内牛碗面

测试regsvr32 pythoncom27.dll一直是失败,即使使用mt嵌入了manifest信息也不行,当我把windows\system32目录下的 pythoncom27.dll和pywintypes27.dll改名后,才行。原来regsvr32默认都是在处理windows\system32 目录下的dll,即使当前目录有也不管。。。。。。无语了。终于出现“已加载***.dll,但没有找到dllregisterserver输入点…..”。看来想dll中嵌入manifest信息是管用的。。下次最好写上目录,如:regsvr32 .\pythoncom27.dll

ps:2010.12.26 完美解决

我使用的python2.7以及截止目前的2.6–3.1版本python的pyd文件根 据python.org的建议(要求),全部没有manifest信息。这是为了更好的在程序运行时根据python.exe提供的crt来运行。 pywin32提供的pythoncom27.dll以及pywintypes27.dll也没有manifest信息。这样一般情况都没有问题,只是当 使用python制作的dll类型的com组件时会发生R6034错误。解决的办法有2个:为调用com组件的exe制作一个manifest文件,指明 msvcr90.dll的依赖;或者把所有使用到的dll以及pyd都嵌入manifest信息。

为什么根本就没有人研究这个信息呢?也许广大的pythoner都不玩com吧 ==||

相关文章

python使用matplotlib绘制热图

python使用matplotlib绘制热图

python常用的绘图库就是matplotlib,今天在给公司绘图时,偶然间发现matplotlib可以绘制热图,并且十分简洁,拿出来跟大家分享一下。(由于涉及到公司数据问题,这里采用随...

以Flask为例讲解Python的框架的使用方法

以Flask为例讲解Python的框架的使用方法

了解了WSGI框架,我们发现:其实一个Web App,就是写一个WSGI的处理函数,针对每个HTTP请求进行响应。 但是如何处理HTTP请求不是问题,问题是如何处理100个不同的URL。...

Python装饰器入门学习教程(九步学习)

装饰器(decorator)是一种高级Python语法。装饰器可以对一个函数、方法或者类进行加工。在Python中,我们有多种方法对函数和类进行加工,比如在Python闭包中,我们见到函...

老生常谈Python序列化和反序列化

通过将对象序列化可以将其存储在变量或者文件中,可以保存当时对象的状态,实现其生命周期的延长。并且需要时可以再次将这个对象读取出来。Python中有几个常用模块可实现这一功能。 pickl...

利用python解决mysql视图导入导出依赖的问题

视图 视图是一个虚拟表(非真实存在),其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用名称即可获取结果集,并可以将其当作表来使用。 创建视图 创建一个名称为v1的视...