我正在使用非托管C ++中的API为Solidworks编写一个独立的应用程序,并面临某种问题。 在图纸上有获取注释位置坐标的方法 - IGetPosition和GetPosition。两者都声称具有3个元素的数组作为RetVals。但Visual Studio不接受我将双打数组传递给IGetPosition。
同时,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值不兼容。 还发现了一些关于元帅化的事情。这是正确的方法吗?如果是这样,你会非常友好地向我提供一个例子吗?
答案 0 :(得分:1)
这里的问题是C ++不允许数组作为函数参数或返回值。但是,它允许指针和数组衰减指针。实际上,new double[3]
创建一个数组并返回一个指针。
特别是,数组衰减为指向其第一个元素的指针。也就是说,double XYZ[3]
衰减为指向double*
的{{1}}。
您使用了XYZ[0]
。这也是一个有效的表达式,但它给你一个指向数组的指针 - 而不是它的第一个元素。只需删除&XYZ
,然后使用&
。