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

Posted

技术标签:

【中文标题】如何将二维数组从 C# 传递到 C++?【英文标题】:How can I pass a 2-dimensional array from C# to C++? 【发布时间】:2013-02-19 09:22:33 【问题描述】:

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

Void Write( Const VARIANT *pData)

pData 是一个二维数组,数据类型为Variant

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

Void Write( ref object pData);

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

【问题讨论】:

如果您的 ALT/COM 对象的方法Write 声明为Void Write( Const VARIANT *pData),则在您引用dll 的c# 中将看不到它。签名Void Write( Const VARIANT *pData) 对吗?还是STDMETHOD(Write)(VARIANT* pdata);?在我即将编辑的答案中,我假设它是STDMETHOD(Write)(VARIANT* pdata); 【参考方案1】:

VARIANTs 的数组非常适合 VARIANT 类型。你可以这样:

void Write(VARIANT vData)

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

【讨论】:

【参考方案2】:

关于如何在非托管代码 (c++) 和托管代码(例如 c# 或 .NET)here 之间交换 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。

【讨论】:

请注意,link-only answers are discouraged,SO 答案应该是搜索解决方案的终点(相对于另一个参考中途停留,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。 感谢您的评论,我显然缺乏活力。 ;-) 因此,我现在将编辑我的答案。

以上是关于如何将二维数组从 C# 传递到 C++?的主要内容,如果未能解决你的问题,请参考以下文章

将二维双数组从 C# 传递到 C++ 函数

使用 C++/CLI 包装器将二维数组从 C# 传递到非托管 C++

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

将二维数组传递给另一个类 C++

将二维数组信息传递给 c# 中的方法

无法将二维数组传递给 C++ 中的辅助函数