gpt4 book ai didi

c++ - 混合托管和非托管 C++ 代码?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:55:15 24 4
gpt4 key购买 nike

我有几个关于混合托管 C++ 和非托管 C++ 的具体问题:

  1. 如果我在类/结构声明中遗漏了 refvalue,是否会自动使类/结构成为非托管的?或者我是否仍需要包含 #pragma unmanaged#pragma managed 指令?
  2. 非托管类型和托管类型的兼容性如何?例如,我可以在托管类中有一个非托管对象,对吗?我可以将非托管类/结构传递给托管函数(即,将 std::string 传递给托管函数)吗?

谢谢你的帮助,

亚历克斯

最佳答案

你不能有混合类型(包含托管对象的本地类,反之亦然)。可能的是在托管类中有一个指向 native 类的指针,在 native 类中有一个用 gcroot 模板包装的托管句柄​​。这是确保垃圾收集器永远不会尝试移动 native 数据所必需的(这会破坏纯 native 代码持有的指针)。

托管类型始终使用托管代码实现。如果原生类型调用托管类型,则它们必须使用托管代码实现。

#pragma managed(push, off) 是强制代码编译为原生代码的方法。这样做的几个原因:C++ 编译器的更好优化,不能被垃圾收集中断等。或者,您可以使用 /clr:pure 强制所有代码编译为托管代码,甚至 /clr:safe 来做同样的事情,并使其可验证。

任何编译为托管的代码都可以接受 native 和托管类型作为参数和返回值。该代码可以位于托管类型、 native 类型或自由(全局)函数中。

关于c++ - 混合托管和非托管 C++ 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729008/

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