我在C ++方面没有太多经验。我正在使用Visual Studio 2012来构建。
我有:
我想构建第一个解决方案,然后在C#Unit测试中使用生成的dll。稍后将在几个项目中使用C ++ / CLI,因此我创建了测试来验证功能。
当我创建C ++ / CLI时,它默认创建了Class1。我还没有删除这个类,但我为其中一个C ++类创建了一个包装器。
当我将这个dll添加到C#项目时,Class1是可见的(我甚至添加了一个测试方法并且它可以工作),但是我可以访问我创建的Wrapper类。
我的C ++ / CLI项目名称是:
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;}
};
}
My 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#代码。
(如果您需要更多细节,请告诉我,我会添加它)
答案 0 :(得分:4)
您错过了“public
”的ref class MyManagedWrapper
。