gpt4 book ai didi

c++ - 无法在 C# 项目中使用 C++/CLI 项目的类

转载 作者:搜寻专家 更新时间:2023-10-31 01:06:32 24 4
gpt4 key购买 nike

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

我有:

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

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

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

当我将这个 dll 添加到 C# 项目时,Class1 是可见的(我什至添加了一个测试方法并且它有效),但我可以访问我创建的包装器类。

我的 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 工作正常,但我尝试执行 new MyManagedWrapper() 但它不起作用。我也尝试使用全命名空间,但它就像类和命名空间不存在一样。

我用了this页面作为创建我的代码的引用。为什么可以访问 Class1 类而不是我创建的类?我试图找到是否有一些特殊的地方我必须注册 Class1 或者它的命名空间,但我找不到任何地方。

我不知道如何让我的 MyManagedWrapper 类对我的 C# 代码可见。

(如果您需要更多细节,让我知道,我会添加)

最佳答案

您缺少“ref class MyManagedWrapper”的public

关于c++ - 无法在 C# 项目中使用 C++/CLI 项目的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20572958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com