ホームページ >バックエンド開発 >Python チュートリアル >Python で記述された COM コンポーネントの R6034 エラーの原因と解決策
この問題を解決するには、このプログラムを呼び出す exe ファイルに適切なマニフェスト ファイルを作成し、正しい msvcr90.dll バージョンを指定します。詳細については、http://www.jb51.net/article/35219.htm を参照してください。
追記: mt.exe を使用して、マニフェスト リソースを exe または dll ファイルにエクスポートまたはマージできます。
マニフェストの表示方法: mt -inputresource:pythoncom27.dll;#2 -out:sss.txt
マニフェストを DLL にマージする方法:
mt.exe –manifest MyApp.exe.manifest -outputresource:MyApp.exe;1
または
mt.exe –manifest MyLibrary.dll.manifest -outputresource:MyLibrary .dll;2
(EXE の場合は 1、DLL の場合は 2。)
ps:2010.12.24
を使用して開発している場合C++ DLL を使用し、libcmtd.lib または libcmt.lib を使用して msvcrtd.lib または msvcrtd.lib を置き換えることでも、この問題を回避できます。
ps: Neiowen Noodles
ファイルを Windowssystem32 に置くと、マニフェスト情報が mt を使用して埋め込まれている場合でも、regsvr32 pythoncom27.dll のテストは常に失敗します。ディレクトリ pythoncom27.dll および pywintypes27.dll の名前を変更した後のみ。現在のディレクトリに DLL が存在する場合でも、regsvr32 はデフォルトで Windowssystem32 ディレクトリ内の DLL を処理することがわかりました。 。 。 。 。 。無言。最後に、「***.dll はロードされましたが、dllregisterserver 入力ポイントが見つかりませんでした...」と表示されます。 dllにマニフェスト情報を埋め込むと便利なようです。 。次回は次のようにディレクトリを作成するのが最善です: regsvr32 .pythoncom27.dll
ps:2010.12.26 完璧な解決策
私が使用している python2.7 と私がこれまでに使用したもの python.org の推奨事項 (要件) によると、Python バージョン 2.6 ~ 3.1 の pyd ファイルにはマニフェスト情報がありません。これは、プログラムの実行時に python.exe によって提供される crt に従って実行するためです。 pywin32 によって提供される pythoncom27.dll および pywintypes27.dll にもマニフェスト情報はありません。このように、通常は問題ないのですが、Pythonで作られたdll系のcomコンポーネントを使用するとR6034エラーが発生します。解決策は 2 つあります。COM コンポーネントを呼び出す exe のマニフェスト ファイルを作成し、msvcr90.dll の依存関係を示すか、使用されるすべての DLL と pyd のマニフェスト情報を埋め込みます。
なぜ誰もこの情報をまったく研究しなかったのでしょうか?おそらく、ほとんどの Python 使用者は com ==|| をプレイしません。