Python編寫的com組件發生R6034錯誤的原因與解決辦法

來源:互聯網
上載者:User

解決該問題的方法可以為調用本程式的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吧 ==||

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.