2013-03-05 87 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

相關問題