スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 

.NET TIPS

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

デジタルアドバンテージ 岸本 真二郎
2009/04/16

 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内で参照)が存在しないことが示されている。

 外部のDLLファイルを利用している場合に、アプリケーション実行時に身に覚えのないFileNotFound例外が発生した場合は、DLLファイルの依存関係を疑ってみるとよいだろう。End of Article

カテゴリ:開発環境&ツール 処理対象:ツール
使用ライブラリ:DllImport属性(System.Runtime.InteropServices名前空間)
使用ライブラリ:FileNotFound例外(System名前空間)
関連TIPS:HTMLファイルを簡単に解析するには?

この記事と関連性の高い別の.NET TIPS
アプリケーションのEXEファイルやDLLファイルを1つにまとめるには?
Win32 APIやDLL関数に構造体を渡すには?
Win32 APIやDLL関数に文字列や文字列バッファを渡すには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」
Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
@IT Sepcial
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Sepcial
ソリューションFLASH