我有一个关于混合托管C ++与非托管C ++几个具体的问题:
- 如果我离开了
ref
和value
在类/结构声明,并自动使类/结构的非托管? 或者我还需要包括#pragma unmanaged
和#pragma managed
指令? - 如何兼容的非托管和托管类型? 例如,我可以在一个管理类的非托管对象,对不对? 我可以通过一个非托管类/结构的管理功能(即通过为std :: string的管理功能)?
谢谢你的帮助,
亚历克斯
我有一个关于混合托管C ++与非托管C ++几个具体的问题:
ref
和value
在类/结构声明,并自动使类/结构的非托管? 或者我还需要包括#pragma unmanaged
和#pragma managed
指令? 谢谢你的帮助,
亚历克斯
你不能有混合型(含有被管理对象机类,或反之亦然)。 什么是可能的是有一个指向管理的一个内部的本机类和管理的手柄,包裹着gcroot
模板,本地类中。 这是必要的,以确保垃圾收集器永远不会尝试来移动本地数据(这将打破由纯原生代码举行指针)。
托管类型使用托管代码总是执行。 原生类型必须使用托管代码,如果他们打电话给管理类型来实现。
#pragma managed(push, off)
是要被编译为本机迫使代码的方式。 从C ++编译器更好的优化,不能被垃圾回收等,或者被打断,你可以使用:一对夫妇的理由这样做/clr:pure
强制所有代码被编译为托管,甚至/clr:safe
做同样的事情,也使其可验证。
因为管理能够接受本地和托管类型作为参数和返回值被编译的任何代码。 而这些代码可以是托管型,原生型,或自由(全局)函数中。