这是我在StackOverFLow中的第一篇文章!
我正在尝试理解C ++ / CLI,我有一个带有两个属性getLx
和setLx
的非托管结构,它检索指向double的指针并分别接受指向double的指针。
因此,我在非托管方法中填充setLx
中的值,并尝试从托管范围中的getLx
检索值。我想将非托管堆上分配的数据转换或获取到托管堆。
所以基本上在下面的示例代码中,我需要来自本机double^
本机指针引用类型的<{1}} 引用类型
double*
答案 0 :(得分:2)
首先:虽然它是C ++ / CLI中的有效类型,但您不应使用double^
。对值类型的托管引用很奇怪,不必要,并且在其他.Net语言中根本不存在(例如,C#)。
所以,看起来你的double*
是一个数组。托管数组类型为array<double>^
,而不是double^
。这就是您应该在管理方面使用的内容。托管数组也知道自己的长度,因此您不需要单独公开计数。
为了将数据从double*
移动到array<double>^
,需要复制它。无法创建array
对象,使其使用已由其他内容分配的内存,因此复制数据是唯一的可能性。您可以使用Marshal::Copy
方法,也可以使用for
循环并自行复制数据。 (他们归结为同样的事情。)