如何将C#中的二维数组传递给C ++?

时间:2013-03-05 04:40:52

标签: c# atl

以下方法是在C ++(ATL COM dll)

Void Write( Const VARIANT *pData)

pData是数据类型Variant的二维数组。

当我在C#.NET项目中添加此引用时,IDE将该方法显示为

Void Write( ref object pData);

如何从C#传递二维数组?

2 个答案:

答案 0 :(得分:0)

VARIANT的数组很适合VARIANT类型。你可以这样:

void Write(VARIANT vData)

其中vData.vt == (VT_ARRAY | VT_VARIANT)vData.parrray是数组数据(安全数组 - 它可以是任意维,数组描述符本身包含边界和维数)。 C#将能够做到正确。

答案 1 :(得分:0)

有一个关于如何在非托管代码(c ++)和托管代码(例如c#或.NET)之间交换VARIANT的非常好的教程here ,它可能会对你有帮助。

修改

很久以前的承诺(对不起,我忘了)我编辑了我的答案:

您可以在c#中声明您的2D数组:

object thearray = new object[,] {{2.0, 1.0},{-3.0, 9.0}} ;

并将其传递给您的com方法。你也可以这样做:

object[,] thetempmatrix = {{2.0, 1.0},{-3.0, 9.0}} ;
object thearray = thetempmatrix ;

请注意,您是否已定义

object[,] thearray = {{2.0, 1.0},{-3.0, 9.0}} ;

它也可以工作,但是数组不会被引用传递:假设你的COM方法签名中没有const,它会被你的COM方法更新,但是在你的COM方法调用的退出时,你会得到与你通过的那个相同的阵营。当然,最后一句话与您无关,因为您在COM方法签名中有一个const。