2011-06-30 19 views
4

我必須從C#發送一個列表到C++。C#列表是List<string>MyList,C++代碼接受它爲list<wstring>cppList。如何使用marshalas。如何編組C#中的列表#

感謝

+3

我懷疑你可以用MarshalAs做這個。 C#'List'是連續的,而C++'list'是一個鏈表。 C#的'List '更像'vector '。 –

回答

2

在本地代碼和託管代碼之間使用複雜類型編組總是明智的。 在List的情況下,這些類型完全不同,因爲它們對每個項目都有不同的內存佈局。

所以最好的方法是在本地dll中編寫一個實用函數,該函數接受字符串數組(char *)並手動構建本地List並最終調用所需的方法。您可以輕鬆創建該實用程序功能的包裝。

0

strings在C#是wstrings(2字節unicode字符串),所以如果你說的是真的,那麼沒有特殊的轉換是必要的。

+0

這是一個字符串列表,而不是單個字符串。 –

+0

C#'string'確實是一個UTF-16 Unicode字符串。不過,C++的'wstring'不是。既不是Unicode也不是2字節字符。 –

+0

@Martinho:它在Windows上。 – Puppy

3

C#不能P /調用複雜的C++類型。你將不得不使用C++/CLI,他們可能有一個方法來編組它。否則,你將不得不單獨編組每個字符串。