不能在 C# 项目中使用 C++/CLI 项目的类

Can't use classes of C++/CLI project in C# Project

本文关键字:项目 CLI C++ 不能      更新时间:2023-10-16

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

我有:

  • 具有以下功能的解决方案:
    • C++中的静态库(不在C++/CLI中)
    • C++测试项目(我在这里测试C++静态库中的所有代码)
    • 包装程序项目C++/CLI
  • 另一个解决方案:
    • C#测试项目

我想构建第一个解决方案,然后在C#单元测试中使用生成的dll。稍后,C++/CLI将用于几个项目,因此我将创建测试来验证功能。

当我创建C++/CLI投影时,默认情况下它创建了Class1。我还没有删除这个类,但我为其中一个C++类创建了一个包装器。

当我将这个dll添加到C#项目中时,Class1是可见的(我甚至添加了一个测试方法,它可以工作),但我可以访问我创建的Wrapper类。

我的C++/CLI项目名称是:

  • MyNamespace。子命名空间。管理。我的项目

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++ProjectFolderPathMyCPPClass.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,但它就像类一样,命名空间不存在。

我使用此页面作为创建代码的参考。为什么Class1类是可访问的,而不是我创建的类?我想知道是否有什么特殊的地方需要注册Class1或它的命名空间,但我找不到。

我不知道如何使我的MyManagedWrapper类在C#代码中可见

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

您缺少"ref class MyManagedWrapper"的public