2013-01-31 148 views
1

使用C#和C++/CLI從interop開始的最佳在線指南/教程是什麼?我正在尋找一個將C#中的結構傳遞給C++/CLI的好指南。我見過的許多教程都沒有涉及將C#中創建的自定義結構傳遞給C++/CLI。 有什麼建議嗎?將C#結構傳遞給C++/CLI

謝謝。

+1

[This](http://msdn.microsoft.com/en-us/library/aa288468%28v=vs.71%29.aspx)沒有幫助?有關於編組結構的全部內容。 – nneonneo

+0

@nneonneo,一目瞭然,我沒有看到任何關於將結構從C#傳遞到C++的問題,這正是OP所要求的。這是一個常見的錯誤,因爲大多數情況下,.NET都會調用非託管代碼,但是從非託管環境調用託管代碼看起來可能會更棘手,如果不是,則不可能。 – series0ne

+0

嗯,這就是編組通常的含義 - 將託管對象變爲非託管對象。即使從託管代碼調用非託管代碼,您也需要能夠雙向轉換結構以實現有效的互操作。 – nneonneo

回答

6

你沒有找到很多教程的原因是,它沒有什麼。您通過從C#中的管理結構,C++/CLI以同樣的方式,你會到另一個C#類/方法

說你有在C#中的結構:

public struct TheStruct 
{ 
    public int i; 
    public String str; 
} 

你會寫在C++/CLI的方法看起來是這樣的:

// *.h 
void PassStruct(TheStruct ^myStruct); 


// *.cpp 
void classnamegoeshere::PassStruct(TheStruct ^myStruct) 
{ 
    int j = myStrict->i; 
    String ^localStr = myStruct->str; 
} 

所以,一對夫婦的音符......

  1. 你需要確保你把使用狀態精神疾病在你的C++/CLI 代碼才能獲得C#參考
  2. 包括C#組件(定義結構)在C++/CLI參考列表)
  3. 管理對象始終使用^指針符號(與*)
  4. 要使用的方法或成員使用標準的指針符號( - >)
  5. 你必須要小心,不要創建循環引用,所以你可能需要有TheStruct在C++/CLI定義在這種情況下,它會 樣子:

    公衆裁判結構TheStruct { 市民: INT I; String^str; }

容易嗎?

+0

這聽起來很容易。我正在將C#結構編組爲一個指針並將其傳遞到C++/CLI中......但這變得複雜了。謝謝,這正是我正在尋找的。 – roboto1986

+0

@大衛我想給你+1,但是你當前的聲望完全是1337,我不想成爲那個混亂的人。 – displayname