2013-03-05 69 views
4

下面的方法是在C++(ATL COM DLL)如何将C#中的二维数组传递给C++?

Void Write(Const VARIANT *pData) 

pData是数据类型Variant的2维阵列。

当添加在C#的.NET项目该参考值,IDE显示方法

Void Write(ref object pData); 

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

+0

如果你的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

回答

0

VARIANT的阵列很适合VARIANT类型。你可以这样说:

void Write(VARIANT vData)

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

0

有一个关于如何在非托管代码(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。

+0

请注意,[仅限链接回答](http://meta.stackoverflow.com/tags/link-only-answers/info),所以SO答案应该是搜索解决方案的终点(而另一个引用的中途停留时间往往会随着时间的推移而变得过时)。请考虑在此添加独立的摘要,并将链接保留为参考。 – kleopatra 2014-01-21 09:13:03

+0

Thx您的评论,我显然缺乏活力的关注。 ;-)我现在会编辑我的答案。 – 2014-01-21 09:24:32

+0

终于编辑了答案。 – 2014-10-25 19:11:07

相关问题