0

過去に、アプリケーションで他の開発者が作成した dll を使用していました。今、私の願いは、dll ファイルの作成について学ぶことです。それで、Visual Studio 2008 で c++ プロジェクトとして dll ファイルの開発を開始しました。

チュートリアルに従って、dll プロジェクトを正常に作成しました。そして、前述の dll をテストするために別の C++ コンソール アプリケーションを作成したとき、以前の dll プロジェクトの lib ファイルとヘッダー ファイルをインクルードする必要があることに気付きました。自作のヘッダーを含めることは、プロジェクトの実装方法に依存すると思いますが、クライアントアプリケーションにlibファイルを含めることはどうですか?

それは追加の依存関係ではありませんか?私の質問が明確でない場合は、もう一度簡単に説明します。VS2008 C++ プロジェクトとして dll ファイルを作成しました。別の C++ プロジェクトから dll にアクセスしようとすると、以前のプロジェクトの lib ファイルを含める必要がありました。したがって、何かまたは依存関係を含めないようにして、クライアントアプリケーションでdllを使用する方法を知りたいです...

私の言葉が意味をなさない場合は、申し訳ありません...私はdll関連のものの初心者です...

4

2 に答える 2

1

LIB ファイルは、実行時に DLL をロードするためのコードを含むインポート ライブラリです。Visual Studio は、クライアント アプリケーションでボイラープレート インポート コードを大量に記述する必要がないように、便宜上これを作成します。

lib ファイルは静的にリンクされるため、クライアント アプリケーションに関する限り、追加の依存関係はありません。

于 2012-09-02T08:14:33.137 に答える
0

2 つの問題があります (ライブラリが LibA で、もう 1 つのライブラリが LibB であるとします):

  1. ヘッダーの依存関係: LibA ヘッダー ファイルには、LibB のヘッダー ファイルを読み取るための #include ディレクティブがあるようです。この場合、LIbA を別のプロジェクトにロードすると、これらの #include は LibB ヘッダー パスをインクルードしないと解決できません。これを回避するには、LibB ヘッダーが .cpp ファイルにのみ表示され、.h ファイルには表示されないように、LibA を作成する必要があります。1 つのオプションは、これに「Forward Declaration」を使用することです (インターネットで確認すると、多くのことを学ぶことができます。ここで基本を繰り返すのは無意味です)。

  2. ライブラリの依存関係: .dll が別の .dll に依存している場合、LibA は LibB なしでは機能しないため、両方のライブラリを使用する以外に何もできません。1 つの解決策は、LibB を静的ライブラリとして使用し、それを LibA に静的にリンクすることです。これにより、LibA.dll にインクルードされ、これだけが必要になります (常に両方が必要ですが、LibB バイナリは LibA ファイル内にあります)。

于 2012-09-02T08:07:13.120 に答える