无法在C#Project中使用C ++ / CLI项目类

时间:2013-12-13 17:55:38

标签: c++ visual-studio-2012 c++-cli

我在C ++方面没有太多经验。我正在使用Visual Studio 2012来构建。

我有:

  • 解决方案:
    • C ++中的静态库(不在C ++ / CLI中)。
    • C ++测试项目(这里我正在测试C ++静态库中的所有代码)
    • Wrapper Project C ++ / CLI
  • 另一种解决方案:
    • C#测试项目

我想构建第一个解决方案,然后在C#Unit测试中使用生成的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;}
    };

}

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#代码。

(如果您需要更多细节,请告诉我,我会添加它)

1 个答案:

答案 0 :(得分:4)

您错过了“public”的ref class MyManagedWrapper