0

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

喜欢:我有一个class Editor参考Editor.h

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

Editor^ MainEditor;

但它给了我以下信息:

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

我试图把它放在一个容器里,但我仍然需要声明它。

4

2 回答 2

1

正如错误所述,您不能在全局或静态级别拥有托管类型。

您已经声明它可以在方法中使用它。要将其存储在本机类中,您需要使用 gcroot。

于 2012-07-11T13:14:33.607 回答
1

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

这是允许的:

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

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

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

于 2012-07-11T13:33:19.130 回答