解決該問題的方法可以為調用本程式的exe檔案建立一個合適的manifest檔案,指定正確的msvcr90.dll版本即可,具體可參照http://www.jb51.net/article/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吧 ==||