如何在非托管C ++中表示System.double?

时间:2018-02-15 12:47:29

标签: c++ c++-cli unmanaged managed

我正在使用非托管C ++中的API为Solidworks编写一个独立的应用程序,并面临某种问题。 在图纸上有获取注释位置坐标的方法 - IGetPosition和GetPosition。两者都声称具有3个元素的数组作为RetVals。但Visual Studio不接受我将双打数组传递给IGetPosition。

Pic1

同时,API帮助提供了C#和C ++ / CLI中定义的示例:

System.double IGetPosition(); 

System.double SW API IGetPosition 正如我所知,System.double不是一个双重的,而是Managed C ++中的一个结构。因为我只是一个初学者,所以我不喜欢这些东西。 所以问题是:我如何在非托管代码中表示System.double被接受为IGetPosition&参数?

BTW:GetPosition方法采用VARIANT,但返回排名1的安全阵列,这似乎与3个XYZ值不兼容。 还发现了一些关于元帅化的事情。这是正确的方法吗?如果是这样,你会非常友好地向我提供一个例子吗?

1 个答案:

答案 0 :(得分:1)

这里的问题是C ++不允许数组作为函数参数或返回值。但是,它允许指针和数组衰减指针。实际上,new double[3]创建一个数组并返回一个指针。

特别是,数组衰减为指向其第一个元素的指针。也就是说,double XYZ[3]衰减为指向double*的{​​{1}}。

您使用了XYZ[0]。这也是一个有效的表达式,但它给你一个指向数组的指针 - 而不是它的第一个元素。只需删除&XYZ,然后使用&