2

状況は次のとおりです。

MyDll(DLL)、MyDllUnitTest(コンソールEXE)の2つのプロジェクトを持つ1つのVS2005ソリューションがあります。

MyDllには、DLLの内部にあり、エクスポートされるべきではないMyClassというクラスがあります。MyDllUnitTestでテストしたいので、MyClassTestというテストスイートクラスを追加しました。ここで、MyClassのインスタンスを作成してテストします。

私の質問:MyDllをビルドして作成したMyClassのオブジェクトファイルをMyDllUnitTest EXEにリンクするにはどうすればよいですか?MyDllUnitTestでMyClassをビルドしたくないし、クラスをエクスポートしたくない。

両方のプロジェクトに同じ中間ディレクトリを使用して(オブジェクトファイルが同じディレクトリにあるように)、VS2005の参照機能を使用してみました([プロジェクト]->[参照]->[新しい参照の追加...])。 t work-まだリンクエラーが発生します(LNK2001)。

編集: 2つのプロジェクトで同じソースファイルを使用したくない-MyClass / MyClassTestが多数あるという顔を考えてみてください。つまり、各MyClassを別のプロジェクトに複製する必要があります。2つのプロジェクトで同じオブジェクトファイルを使用できることはわかっています。以前に使用したことがありますが、その方法を忘れてしまいました。

編集:両方のプロジェクトにファイルを配置することにしたので、2回コンパイルされます。「参照」機能は自動的に機能することがわかりましたが、静的ライブラリプロジェクトの場合のみです。

4

5 に答える 5

2

dll プロジェクトでビルドしたくない理由がわかりません。両方のプロジェクトが同じソース ファイルを使用している限り、どちらも同じオブジェクト ファイルを生成します (コンパイラ オプションが同じように設定されていると仮定します)。

クラス自体をエクスポートせずに dll をテストする場合 (これは、DLL 内のクラスをエクスポートすることは通常悪い考えであるためだと思います)、dll から「ファクトリ」関数をエクスポートすることを検討してください。次のような署名があります。

extern "C" MyClass *CreateMyClass();

この関数は MyClass のオブジェクトを作成し、それへのポインターを返します。単体テストでは、返されたクラス オブジェクトを使用して必要なことを実行できます。

于 2008-11-04T11:28:50.847 に答える
1

私がここで行っているのは、テスト プロジェクトに追加の「フィルター」「オブジェクト ファイル」を作成し、「ヘッダー ファイル」と「ソース ファイル」と一緒に、必要なすべての .obj ファイルをそこに配置することです。ちなみに、すでに生成されています)。これはここでうまくいくようです。また、ここでは単体テストにも使用します。また、いくつかの場所では、2 つの異なる DLL に使用するときに同じソース ファイルを 2 回コンパイルする必要がありません。

このようにしている理由の 1 つは、CMake を使用してプロジェクト ファイルを生成しているため、内部の Visual Studio 'magic' のすべてを使用できないためです。

于 2012-08-06T15:47:47.807 に答える
1

これは、あなたがやろうとしていることを達成するための代替アプローチですが、それがあなたの要件を満たすと信じています...

テストするクラスを含むアセンブリで InternalsVisibleToAttribute 属性を使用します。次に、このアセンブリを参照すると、他のアセンブリからこれらの型が「見えない」場合でも、クラスをテストできます。魔法!

使用する属性の MSDN リファレンスは次のとおりです...

http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx

于 2008-11-04T22:19:28.663 に答える
0

また、プロジェクト リンカー設定の追加の依存関係のリストに .obj ファイルを明示的に追加する必要があると思います。

于 2008-11-04T12:21:25.453 に答える
0

すべてのオブジェクトで .lib を生成するコマンドを使用することもできます。

回答のように: Visual C++ link generated objs from referenced project

于 2011-12-17T01:36:08.167 に答える