C ++在本机代码中声明托管类型

时间:2012-07-11 11:44:18

标签: variables c++-cli native managed

我需要知道如何在本机代码中声明托管类型?

赞:我在class Editor

中有一个参考Editor.h

在本机代码(main.cpp)中:

Editor^ MainEditor;

但它给了我以下内容:

MainEditor' : global or static variable may not have managed type 'Cube3D::Editor ^'

我试图在容器内制作它,但我仍需要声明它。

2 个答案:

答案 0 :(得分:1)

由于错误声明您无法在全局或静态级别拥有托管类型。

您已声明在方法中使用它是正确的。要将其存储在本机类中,您需要使用gcroot。

答案 1 :(得分:1)

你不能直接这样做。问题是托管对象将被垃圾收集器移动,纯粹的本机代码无法处理。

这是允许的:

  • 必须使用/clr编译托管类型的成员才能生成托管代码。这可以使用托管代码和本机代码实现的托管类型和本机类型。
  • 可以使用/clr编译本机类型和命名空间的成员以生成托管代码。这可以使用托管代码和本机代码实现的托管类型和本机类型。
  • 可以在没有/clr的情况下编译本机类型和命名空间的成员以生成本机代码。这只能使用本机类型,但使用的类型可以通过托管代码或本机代码实现。
  • 甚至可以在本机代码中实现本机类型的某些成员,并且可以在托管代码中实现相同类型的其他成员。

因此,您需要在本机代码和托管类型之间使用一个层,此中间层将是使用托管代码实现的本机类型。

当然,#pragma managed可以与/clr互换使用,以便更好地控制。