以下方法是在C ++(ATL COM dll)
中Void Write( Const VARIANT *pData)
pData
是数据类型Variant
的二维数组。
当我在C#.NET项目中添加此引用时,IDE将该方法显示为
Void Write( ref object pData);
如何从C#传递二维数组?
答案 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。