是否可以在C#中使用C ++ / CLI类中定义的实例?

时间:2016-04-20 08:36:29

标签: c# .net c++-cli

在C ++ / CLI中,我在类中定义了一些实例,如下所示。

public ref class A
{
public:
    int test(){return 0;}
};

public ref Class B
{
public:
    static A^ a_Instance = gcnew A();

};

在C#方面,我创建了一个B实例,以便尝试使用a_Instance中的函数,如下所示。

private B b_instance = new B();

问题是,如果我可以在托管C ++类中创建实例并使用其中的函数?

1 个答案:

答案 0 :(得分:1)

这是一个示例代码,说明如何执行此操作。首先,定义您的托管类(将它们标记为ref和public)。这应该在C ++ / CLI项目中编译。

// CCLI.h
#pragma once
using namespace System;
namespace CCLI {

    public ref class A
    {
    public:
        int test(){return 0;}
    };

    public ref class B
    {
    public:
        static A^ a_Instance = gcnew A();
    };
}

然后,添加程序集作为C#项目的引用,您可以这样使用这些元素:

namespace CSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            CCLI.B b_instance = new CCLI.B();

            CCLI.B.a_Instance.test();
        }
    }
}

两个细节:C ++ / CLI中使用的A实例是通过静态字段,因此您希望静态引用它。此外,您希望确保在为给定体系结构(32位或64位)编译C ++ / CLI时,使用它的点网组件将在适当的体系结构(x86或x64)中启动。