我在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#代碼。
(如果你需要更多的細節,讓我知道,我將它添加)
你錯過了「ref class MyManagedWrapper」的公開 – IdeaHat
哦,上帝!我怎麼沒有看到!我使用的是Visual Studio Wizzards,因爲我不習慣C++的東西,而且我也沒有意識到它。如果你將它添加爲asnwer,我會接受它。如果沒有,我可以刪除我的問題。謝謝! – Dzyann