4

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

Void Write( Const VARIANT *pData)

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

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

Void Write( ref object pData);

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

4

2 回答 2

0

Array of VARIANTs fits itself well into VARIANT type. You can have it like this:

void Write(VARIANT vData)

where vData.vt == (VT_ARRAY | VT_VARIANT), and vData.parrray is array data (safe array - it can by anydimensional, the array descriptor itself contains bounds and number of dimensions). C# will be able to get it right.

于 2013-03-05T11:38:12.660 回答
0

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

编辑

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

您可以像这样在 c# 中声明您的二维数组:

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。

于 2014-01-21T08:23:05.840 回答