从UnManaged堆中检索托管堆中的数据

时间:2017-03-27 12:19:40

标签: c++-cli clr visual-c++-2015

这是我在StackOverFLow中的第一篇文章!

我正在尝试理解C ++ / CLI,我有一个带有两个属性getLxsetLx的非托管结构,它检索指向double的指针并分别接受指向double的指针。 因此,我在非托管方法中填充setLx中的值,并尝试从托管范围中的getLx检索值。我想将非托管堆上分配的数据转换或获取到托管堆。

所以基本上在下面的示例代码中,我需要来自本机double^ 本机指针引用类型的<{1}} 引用类型

double*

1 个答案:

答案 0 :(得分:2)

首先:虽然它是C ++ / CLI中的有效类型,但您不应使用double^。对值类型的托管引用很奇怪,不必要,并且在其他.Net语言中根本不存在(例如,C#)。

所以,看起来你的double*是一个数组。托管数组类型为array<double>^,而不是double^。这就是您应该在管理方面使用的内容。托管数组也知道自己的长度,因此您不需要单独公开计数。

为了将数据从double*移动到array<double>^,需要复制它。无法创建array对象,使其使用已由其他内容分配的内存,因此复制数据是唯一的可能性。您可以使用Marshal::Copy方法,也可以使用for循环并自行复制数据。 (他们归结为同样的事情。)