3

プログラム (モデル) のコードを含む Visual Studio プロジェクトがあります。ブースト テストを配置する別のプロジェクトを作成しました。

問題は、私がそれを機能させることができないということです。

プロジェクトでブースト テストを単独で使用することはできますが、最初のプロジェクト (テストを実行するプロジェクト) にリンク (参照など) するとすぐに、ブースト テスト プロジェクトがコンパイルされません。

1>E:\boost_1_53_0\boost/detail/interlocked.hpp(99): warning C4164: '_InterlockedExchange' : fonction intrinsèque non déclarée
1>E:\boost_1_53_0\boost/detail/interlocked.hpp(100): warning C4164: '_InterlockedExchangeAdd' : fonction intrinsèque non déclarée
1>E:\boost_1_53_0\boost/smart_ptr/detail/spinlock_w32.hpp(62): error C3861: '_InterlockedExchange' : identificateur introuvable

私はあなたができないことをそこに読みました

コードはC++ではなく「C++ CLI」であるため、ブーストを使用できません。C++ には System 名前空間がありません。各 .cpp ファイルでは、C++/CLI (したがって System 名前空間) または boost を使用できます。System 名前空間を使用する場合は、「Common Langauge Runtime Support」を有効にする必要があります。ブーストの場合は無効にする必要があります

>> C++/CLI プログラムで Boost を使用できないことを確認できる人はいますか?

4

2 に答える 2

2

基本的な問題は、boost のような C++ (非 CLI) コードでは、マネージド参照またはポインターを保持できないことです。

C++/CLI コードの場合、通常は C# テスト フレームワークを使用する方が望ましいことがわかりました。C# は、純粋な C++ 部分と通信できる C++/CLI 部分と通信できます。さらに、C++/CLI のほとんどのユースケースは、.Net 用の C++ または C コードをラップしているため、.Net が認識できるインターフェイスをテストするのは当然の選択です。

例として、すべてのインターフェイスが C# で指定されているプロジェクトがあります。C++/CLI を使用してブースト ライブラリを呼び出す実装もあれば、純粋な C# の実装もあります。単体テストはジェネリックであり、ジェネリック パラメータはテスト対象の実際の実装です。

MSTest/vstest の例:

public class MyTest< T > where T : IMyInterface
{
    [TestMethod]
    public void foo() {...}
}

[TestClass]
public class TestCppCli : MyTest< CppCliImpl > {}

[TestClass]
public class TestCSharp : MyTest< CSharpImpl> {}
于 2013-05-29T08:21:19.093 に答える