ホームページ >バックエンド開発 >Python チュートリアル >Python で記述された COM コンポーネントの R6034 エラーの原因と解決策

Python で記述された COM コンポーネントの R6034 エラーの原因と解決策

WBOY
WBOYオリジナル
2016-06-16 08:46:311414ブラウズ

この問題を解決するには、このプログラムを呼び出す 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 ==|| をプレイしません。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。