下面的方法是在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