下面的方法是在C++(ATL COM DLL)如何将C#中的二维数组传递给C++?
Void Write(Const VARIANT *pData)
pData
是数据类型Variant
的2维阵列。
当添加在C#的.NET项目该参考值,IDE显示方法
Void Write(ref object pData);
如何传递从C#2维数组?
下面的方法是在C++(ATL COM DLL)如何将C#中的二维数组传递给C++?
Void Write(Const VARIANT *pData)
pData
是数据类型Variant
的2维阵列。
当添加在C#的.NET项目该参考值,IDE显示方法
Void Write(ref object pData);
如何传递从C#2维数组?
VARIANT
的阵列很适合VARIANT类型。你可以这样说:
void Write(VARIANT vData)
其中vData.vt == (VT_ARRAY | VT_VARIANT)
,而vData.parrray
是数组数据(安全数组 - 它可以通过anydimensional,数组描述符本身包含边界和维数)。 C#将能够做到。
有一个关于如何在非托管代码(C++)和托管代码(例如c#或.NET)之间交换VARIANT的非常好的教程,它可以帮助你。
编辑
如所承诺很久以前(对不起,我忘了)我编辑我的答案:
你可以声明在C#中的二维数组是这样的:
object thearray = new object[,] {{2.0, 1.0},{-3.0, 9.0}} ;
并将它传递给你的com方法。你也可以这样做:那你会怎么进行限定
object[,] thearray = {{2.0, 1.0},{-3.0, 9.0}} ;
会还努力,但thearray不会一直按引用传递
object[,] thetempmatrix = {{2.0, 1.0},{-3.0, 9.0}} ;
object thearray = thetempmatrix ;
注意:假设没有常在你的COM方法签名,它会被你的COM方法更新,但在你的COM方法调用的出口处,你会得到和你传递的一样的数组。当然,这最后一句话并不关注你,因为你的COM方法签名中有一个const。
请注意,[仅限链接回答](http://meta.stackoverflow.com/tags/link-only-answers/info),所以SO答案应该是搜索解决方案的终点(而另一个引用的中途停留时间往往会随着时间的推移而变得过时)。请考虑在此添加独立的摘要,并将链接保留为参考。 – kleopatra 2014-01-21 09:13:03
Thx您的评论,我显然缺乏活力的关注。 ;-)我现在会编辑我的答案。 – 2014-01-21 09:24:32
终于编辑了答案。 – 2014-10-25 19:11:07
如果你的ALT/COM对象的'Write'方法被声明为'Void Write(const VARIANT * pData)',它将不会在引用你的dll的c#中看到。签名'Void Write const VARIANT * pData)'对吗?或者它是'STDMETHOD(写)(VARIANT * pdata);'?在我的答案中,我即将编辑,我会假设它是'STDMETHOD(写)(VARIANT * pdata);' – 2014-01-21 12:42:50