DLL (ダイナミック リンク ライブラリ) は、複数のアプリで使用できるコードとデータを含むライブラリです。 Visual Studio を使用して、DLL の作成、ビルド、構成、デバッグを行うことができます。
DLL を作成する
次の Visual Studio プロジェクト テンプレートでは、DLL を作成できます。
- クラス ライブラリ (.NET、.NET Framework、およびその他のアプリ プラットフォーム)
- Windows フォーム コントロール ライブラリ (.NET および .NET Framework)
- Dynamic-Link ライブラリ (DLL) (C++)
Windows フォーム コントロール ライブラリのデバッグは、クラス ライブラリのデバッグと似ています。 詳細については、「 Windows フォーム コントロール」を参照してください。
通常、別のプロジェクトから DLL を呼び出します。 呼び出し元のプロジェクトをデバッグするときは、DLL の構成に応じて、DLL コードにステップ インしてデバッグできます。
DLL デバッグ構成
Visual Studio プロジェクト テンプレートを使用してアプリを作成すると、Visual Studio によってデバッグ ビルド構成とリリース ビルド構成に必要な設定が自動的に作成されます。 必要に応じて、これらの設定を変更できます。 詳細については、次の記事を参照してください。
- 方法: デバッグ構成とリリース構成を設定する
- C++ デバッグ構成のプロジェクト設定
- .NET C# デバッグ構成のプロジェクト設定
- C# デバッグ構成のプロジェクト設定
- Visual Basic デバッグ構成のプロジェクト設定
C++ DebuggableAttribute の設定
デバッガーが C++ DLL にアタッチするには、C++ コードで DebuggableAttribute
を出力する必要があります。
DebuggableAttribute
を設定するには:
ソリューション エクスプローラーで C++ DLL プロジェクトを選択し、[プロパティ] アイコンを選択するか、プロジェクトを右クリックして [プロパティ] を選択します。
[プロパティ] ウィンドウの [リンカー>デバッグ] で、[デバッグ可能なアセンブリ] に [はい ] (/ASSEMBLYDEBUG) を選択します。
詳細については、「 /ASSEMBLYDEBUG」を参照してください。
C/C++ DLL ファイルの場所を設定する
外部 DLL をデバッグするには、呼び出し元のプロジェクトが DLL、その .pdb ファイル、および DLL に必要なその他のファイルを検索できる必要があります。 カスタム ビルド タスクを作成して、これらのファイルを <project フォルダー>\Debug 出力フォルダーにコピーすることも、手動でファイルをコピーすることもできます。
C/C++ プロジェクトの場合は、出力フォルダーにコピーするのではなく、プロジェクト のプロパティ ページでヘッダーと LIB ファイルの場所を設定できます。
C/C++ ヘッダーと LIB ファイルの場所を設定するには:
ソリューション エクスプローラーで C/C++ DLL プロジェクトを選択し、[プロパティ] アイコンを選択するか、プロジェクトを右クリックして [プロパティ] を選択します。
[プロパティ] ウィンドウの上部にある [構成] で、[すべての構成] を選択します。
C/C++>General>追加インクルード ディレクトリで、ヘッダー ファイルを含むフォルダーを指定します。
[Linker>General>Additional Libraries Directories] で、LIB ファイルを含むフォルダーを指定します。
> > で、LIB ファイルの完全なパスとファイル名を指定します。
[OK] を選択.
C++ プロジェクト設定の詳細については、「 Windows C++ プロパティ ページリファレンス」を参照してください。
デバッグ バージョンをビルドする
デバッグを開始する前に、必ず DLL のデバッグ バージョンをビルドしてください。 DLL をデバッグするには、呼び出し元アプリがその .pdb ファイル と DLL に必要なその他のファイルを検索できる必要があります。 詳細については、「 方法: デバッグ構成とリリース構成を設定する」を参照してください。
カスタム ビルド タスクを作成して DLL ファイルを <呼び出しプロジェクト フォルダー>\Debug 出力フォルダーにコピーするか、手動でファイルをコピーできます。
DLL は必ず正しい場所で呼び出してください。 これは明白に思えるかもしれませんが、呼び出し元のアプリが DLL の別のコピーを見つけて読み込む場合、デバッガーは設定したブレークポイントにヒットすることはありません。
DLL をデバッグする
DLL を直接実行することはできません。 アプリ (通常は .exe ファイル) によって呼び出される必要があります。
DLL をデバッグするには、 呼び出し元のアプリからデバッグを開始するか、呼び出し元アプリを指定して DLL プロジェクトからデバッグ します。 デバッガーイ ミディエイト ウィンドウ を使用して、呼び出し元アプリを使用せずに、デザイン時に DLL 関数またはメソッドを評価することもできます。
呼び出し元アプリからデバッグを開始する
DLL を呼び出すアプリは次のようになります。
- DLL と同じソリューションまたは別のソリューション内の Visual Studio プロジェクトのアプリ。
- テストコンピューターまたは実稼働コンピューターに既に展開され、実行されている既存のアプリ。
- Web 上にあり、URL を介してアクセスされます。
- DLL を埋め込む Web ページを含む Web アプリ。
呼び出し元アプリのデバッグを開始する前に、DLL にブレークポイントを設定します。 ブレークポイントの使い方の始め方を参照してください。 DLL ブレークポイントにヒットすると、コードをステップ実行して、各行のアクションを観察できます。 詳細については、「 デバッガーでのコードの移動」を参照してください。
呼び出し元アプリから DLL をデバッグするには、次の操作を行います。
呼び出し元アプリのプロジェクトを開き、[デバッグ]、[デバッグの開始>F5 キーを押してデバッグを開始します。
または
テストまたは運用コンピューターで既に展開され、実行されているアプリにアタッチします。 このメソッドは、Web サイトまたは Web アプリの DLL に使用します。 詳細については、「 方法: 実行中のプロセスにアタッチする」を参照してください。
デバッグ中は、[ モジュール ] ウィンドウを使用して、アプリが読み込む DLL と .exe ファイルを確認できます。 [モジュール] ウィンドウを開くには、デバッグ中に [デバッグ>Windows>Modules] を選択します。 詳細については、「 方法: モジュール ウィンドウを使用する」を参照してください。
イミディエイト ウィンドウを使用する
[イミディエイト] ウィンドウを使用すると、デザイン時に DLL 関数またはメソッドを評価できます。 イミディエイト ウィンドウは、呼び出し元アプリの役割を果たします。
注
[ イミディエイト ] ウィンドウは、ほとんどのプロジェクトの種類でデザイン時に使用できます。 SQL、Web プロジェクト、またはスクリプトではサポートされていません。
たとえば、クラス Test
で Class1
という名前のメソッドをテストするには、次のようにします。
DLL プロジェクトを開いた状態で、Debug>> を選択するか、CtrlAlt+I+を押してイミディエイト ウィンドウを開きます。
Class1
ウィンドウに次の C# コードを入力し、Enter キーを押して、型のオブジェクトをインスタンス化します。 このマネージド コードは、C# と Visual Basic で適切な構文を変更して機能します。Class1 obj = new Class1();
C# では、すべての名前を完全修飾する必要があります。 言語サービスが式の評価を試みる場合は、すべてのメソッドまたは変数が現在のスコープとコンテキストに存在する必要があります。
Test
が 1 つのint
パラメーターを受け取ると仮定して、[Test
] ウィンドウを使用してを評価します。?obj.Test(10);
結果は イミディエイト ウィンドウに出力されます。
Test
をデバッグし続けるには、その中にブレークポイントを配置し、関数をもう一度評価します。ブレークポイントにヒットし、
Test
をステップ実行できます。 実行がTest
を離れた後、デバッガーはデザインモードに戻ります。
混合モードデバッグ
DLL の呼び出し元アプリは、マネージド コードまたはネイティブ コードで記述できます。 ネイティブ アプリでマネージド DLL を呼び出し、両方をデバッグする場合は、プロジェクトのプロパティでマネージド デバッガーとネイティブ デバッガーの両方を有効にすることができます。 正確なプロセスは、DLL プロジェクトからデバッグを開始するか、呼び出し元のアプリ プロジェクトからデバッグを開始するかによって異なります。 詳細については、「 方法: 混合モードでデバッグする」を参照してください。
マネージド呼び出し元プロジェクトからネイティブ DLL をデバッグすることもできます。 詳細については、「 マネージド コードとネイティブ コードをデバッグする方法」を参照してください。