質問

WinXPで、DWMAPI.DLLが読み込まれたときに見つからないと主張する.dllを作成しました。問題は、このDLLがVista DLLであり、これがIE7をインストールしているXPユーザーの既知の問題であることです。 IE7をアンインストールするか、プログラムの追加と削除を介して.NET Frameworkを修復することをお勧めします。私は修理をしましたが、何も変わりませんでした。 IE7をアンインストールするつもりはありません。「ウィンドウの再インストール」と同等ではない、より良いソリューションが必要だからです。

IE7をアンインストールしようとした人についての悪いことを読んだことがあるので、そのルートに行くことには消極的です。

Visual Studio 2003(7.1)でC ++を使用しています。アプリケーションの起動時にロードを強制的に遅らせるオプションが表示されません。 DLLプロジェクトを作成したときに、デフォルト設定を使用しました。興味深いオプション、リンカー->入力->遅延ロードDLLを見つけたので、DWMAPI.DLLをそこに配置して、遅延ロードを強制しました。ただし、リンクすると次のようになります:

LINK : warning LNK4199: /DELAYLOAD:dwmapi.dll ignored; no imports found from dwmapi.dll

..そして、それはもちろん、私のDLLをロードしようとしても、何も変わりませんでした。それについては、DWMAPI.DLLにつながるDLLのツリー全体を追加しましたが、同じメッセージが表示されます。 (記録については、foundation.dll-> shell32.dll-> shdocvw.dll-> mshtml.dll-> ieframe.dll-> dwmapi.dllです。)

私がやっていることをより具体的にするために、Mayaプラグインを作成し、スクリプトエディターで常に役立つテキストを取得しています。

// Error: Unable to dynamically load : D:/blahblahblah/mydll.mll
The specified module could not be found.
 //
// Error: The operation completed successfully.
 //
// Error: The operation completed successfully.
 (mydll) //

Dependency Walkerを使用して最初に問題を追跡しましたが、それがDWMAPI.DLLにつながった理由です。これらはメッセージに依存するものであり、DWMAPI.DLLのみが黄色の疑問符の横にあります:

Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.

ジェラルドは正しい。実際、MayaはDependency Walkerとは異なるPATHを使用しています。プラグインは、Mayaプラグインディレクトリにある別のDLL(画像処理用)をロードし、依存しているDLLは問題なく見つかりましたが、Mayaはそうしませんでした。 「プラグイン」を追加する必要がありました。 Maya.envのPATHへ。

この問題は結局DWMAPI.DLLとは関係がないように見えますが、DWMAPIは一般的な問題であるため、DWMAPIの問題について見つけた最良のリンクをNovellのWebサイトに投稿しますこちら。基本的に、ほとんどのプログラムではdepends.exeでこの警告が表示されますが、その横に遅延ロードアイコンがあり、プログラムがDWMAPIを直接または間接的に呼び出さないことが確実な場合は問題ありません。問題は他の場所にあります。遅延読み込みアイコンが表示されない場合は、Visual Studioの/ DELAYおよび/ DELAYLOADオプションを確認する必要があります。依存するという事実は、「警告」を私に与えました。 「エラー」ではなくDWMAPIが自動的にロードされないという事実の手がかりでした。

役に立ちましたか?

解決

更新された問題に基づいて、DWMAPI.dllはおそらく問題ではありません。依存関係ウォーカーは、遅延ロードされたDLLを常にチェックするため、mshtmlにリンクしているときは常にそのエラーを表示します。

現時点では、ランタイムライブラリを動的にロードするようにプロジェクトを設定しており、MayaによってDLLの検索パスが変更されていると思います。そのため、MSVCランタイムDLLが見つからない可能性があります。長い間Mayaプラグインを開発していませんが、最近プラグインDLLを持つ他のアプリでその問題が発生しました。

C / C ++->コード生成->ランタイムライブラリの設定をマルチスレッドDLLではなくマルチスレッドに変更してみてください。

それとは別に、Dependency WalkerをいじってMayaと同じ検索パスを使用し、別の依存関係の問題が発生するかどうかを確認できます。

最後の手段として、Mayaをデバッガで起動し、LoadLibraryにブレークポイントを設定して、その方法でロードされていないライブラリを見つけることができます。

他のヒント

これは注意が必要です。このエラーが発生する主な方法は2つあります。

1)アプリケーションの起動時にロードされたDLLを強制的にロードするようにプロジェクトを設定しました。 DWMAPI.dllは遅延ロードされたDLLであるため、通常、その関数の1つが呼び出されない限りロードされません。 DLLで実行しない限り、XPでは発生しません。ただし、コンパイラーオプションを設定して、とにかく遅延ロードされたDLLをアプリにロードさせることができます。それをしている場合は、しないでください。

2)別の問題が発生した場合、depends.exeから表示されるのは多くの場合、誤ったエラーです。依存関係ウォーカーを介してDLLを実行し、他の依存関係の問題があるかどうかを確認します。他のすべてが失敗した場合は、IE7をアンインストールして、問題が解決するかどうかを確認してください。誤ったエラーの場合、IE7をインストールすると、実際のエラーが表示されます。後でIE7を再度インストールできます。

まさにこの問題がありました。

解決に数時間かかった卑劣な問題。

とにかく。リリースマシンでマネージC ++アプリケーションをコンパイルしました。実行できなかったお客様から苦情が寄せられ、すべてのマシンで魅力的に機能しました。

リリースマシンには、ATLの脆弱性の修正が1か月前に自動的にパッチされ、XPマシンを除く他のすべてのマシンにもパッチが適用されたことが判明しました。

特定のXPマシンでもアプリケーションを実行できませんでした。 ATL修正プログラム(以下のリンクを参照)をインストールして、すべてが正常に機能するようになりました。

http:// www .microsoft.com / downloads / details.aspx?familyid = 766A6AF7-EC73-40FF-B072-9112BAB119C2& displaylang = en

教訓を学んだので、常に中間マニフェスト(デバッグまたはリリースディレクトリにあります)を確認します。これにより、プログラムがリンクされているDLLのバージョンがわかります。

誰にでも役立つことを願っています。

C / C ++->コード生成->ランタイムライブラリの設定をマルチスレッドDLLではなくマルチスレッドに変更してみてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top