2011-06-30 2 views
4

C#のリストはList<string>MyListであり、C++のコードではlist<wstring>cppListとして受け付けています。これはmarshalasを使用する方法です。C#のリストをマーシャリングする方法

C#で

+3

私はこのためにマーシャルを使用することはできません。 C#の 'List'は連続していますが、C++の' list'はリンクされたリストです。 C#の 'List 'は 'ベクトル'のようなものです。 –

答えて

2

ネイティブコードとマネージコードとの間の複合型マーシャリングを使用しないことが常に賢明です。 Listの場合、これらのタイプは、アイテムごとに異なるメモリレイアウトを持つため、完全に異なります。

したがって、文字列(char *)の配列を受け入れ、ネイティブのListを手作業で作成し、最終的に目的のメソッドを呼び出すネイティブdllにユーティリティ関数を書き込むことをお勧めします。そのユーティリティ関数のラッパーを作成するのは簡単です。

0

stringswstrings(2つのバイトのUnicode文字列)あるおかげで、そう、あなたが言うことが本当ならば、特別な変換が必要ありません。

+0

これは個々の文字列ではなく文字列のリストです。 –

+0

C#の 'string'は実際にはUTF-16 Unicode文字列です。しかし、C++の 'wstring'はそうではありません。 Unicodeも2バイト文字もありません。 –

+0

@Martinho:Windows上にあります。 – Puppy

3

C#は複雑なC++型をP/Invokeできません。 C++/CLIを使用する必要がありますが、それらをマーシャリングする方法があるかもしれません。それ以外の場合は、各文字列を個別にマーシャリングする必要があります。