実行プログラムやライブラリ(DLLファイル)の依存関係を確認するには?.NET TIPS

» 2009年04月16日 05時00分 公開
[岸本真二郎デジタルアドバンテージ]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「.NET TIPS」のインデックス

連載目次

 DllImport属性(System.Runtime.InteropServices名前空間)を使って、Win32 APIレベルのネイティブな既存のライブラリを利用する際に、参照先のDLLファイルがさらに別のDLLファイルを参照している場合がある。

 例えば、「TIPS:HTMLファイルを簡単に解析するには?」で紹介している「NTidy」は、ソース・コードがC/C++で記述されている(配布されているバイナリはVisual Studio 2003でビルドされているもよう)。そのため、このライブラリを利用するには、実はC/C++のランタイム・ライブラリである、MSVCP71.DLLやMSVCR71.DLLが実行時に必要となる。

 すべての必要なDLLファイルがそろっていない環境で、このようなライブラリを利用する.NETのアプリケーションを実行した際には、FileNotFoundException(ファイルが見つからない)という例外が発生する。しかし、このメッセージだけでは、DLLファイルの依存関係に原因があることに気付きにくい。

Dependency Walker」は、このようなDLLファイルの依存関係を表示する、Microsoft社製の無償のツールである(Visual Studio 2005ではVisual Studioがインストールされたフォルダの「Common7\Tools\bin\Depends.Exe」にインストールされる)。Dependency Walkerを起動し、アプリケーションやDLLファイルをドラッグ&ドロップすると、DLLファイルの依存関係が分かる。

Dependency Walkerの実行画面
ウィンドウの左上のペインにあるツリーから、NTidy(NTIDY.DLL)の利用にはMSVCP71.DLLとMSVCR71.DLLが必要であると分かる。また、ウィンドウ中ほどでは、DWMAPI.DLL(MSCORE.DDL内で参照)が存在しないことが示されている。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。