如何将二维数组从 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】:
VARIANT
s 的数组非常适合 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++?的主要内容,如果未能解决你的问题,请参考以下文章