2013-12-13 147 views
2

我在C++中沒有太多經驗。我正在使用Visual Studio 2012來構建。不能在C#項目中使用C++/CLI項目類別

我有:

  • 的溶液用:++
    • 靜態庫中C(不是在C++/CLI)。
    • C++測試項目(在這裏我測試從C++靜態庫中的所有代碼)
    • 包裝項目C++/CLI
  • 用另一種解決方案:
    • C#測試項目

我想構建第一個解決方案,然後在C#單元測試中使用生成的dll。稍後,C++/CLI將在幾個項目中使用,因此我正在創建測試來驗證功能。

當我創建了C++/CLI投影時,它默認創建了Class1。我還沒有刪除這個類,但是我爲其中一個C++類創建了一個包裝器。

當我將此dll添加到C#項目中時,Class1是可見的(我甚至添加了測試方法並且它可以工作),但是我可以訪問我創建的Wrapper類。

我的C++/CLI項目名稱爲:

  • MyNamespace.SubNamespace.Managed.MyProject

Class1的代碼(C++/CLI)

#pragma once 

using namespace System; 

namespace MyNamespaceSubNamespaceManagedMyProject 
{ 
public ref class Class1 
    { 
    public: 
       //I used this method to see if the values were going back and forth, and they do 
     int TestMethod(int value){return value;} 
    }; 

} 

我Wrapper Class.h代碼(C++/CLI)

#pragma once 
#include "..\C++ProjectFolderPath\MyCPPClass.h" 
namespace MyNamespace { namespace SubNamespace { namespace ManagedTest { 
ref class MyManagedWrapper 
{ 
private: 
    MyNamespace::SubNamespace::UnmanagedTest::MyCPPClass *myInstance; 
public:  
    MyManagedWrapper(double value1, System::String ^text1, 
     System::String ^text2, array<System::Double>^ double1, 
     array<System::Double>^ double2, array<System::Double>^ double3, 
     array<System::Double>^ double4); 

    ~MyManagedWrapper(); 
}; 
}}} 

我的C#測試

[TestClass] 
public class TEMServiceCppTest 
{ 
    [TestMethod] 
    public void TestMethod1() 
    { 
     var test = new Class1(); 
     Assert.AreEqual(3, test.TestMethod(3)); 
    } 
} 

Class1的作品不錯,但我嘗試做新MyManagedWrapper()和它不工作。我也嘗試過使用fullnamespace,但它像類和命名空間不存在。

我用this頁作爲創建我的代碼的參考。爲什麼Class1類可以訪問,而不是我創建的類?我試圖找到是否有一些特殊的地方,我不得不註冊Class1或它的名字空間,但我找不到任何。

我不知道如何使我的MyManagedWrapper類可見我的C#代碼。

(如果你需要更多的細節,讓我知道,我將它添加)

+1

你錯過了「ref class MyManagedWrapper」的公開 – IdeaHat

+0

哦,上帝!我怎麼沒有看到!我使用的是Visual Studio Wizzards,因爲我不習慣C++的東西,而且我也沒有意識到它。如果你將它添加爲asnwer,我會接受它。如果沒有,我可以刪除我的問題。謝謝! – Dzyann

回答

4

你失蹤了「ref class MyManagedWrapper」一public