C#のリストはList<string>MyList
であり、C++のコードではlist<wstring>cppList
として受け付けています。これはmarshalasを使用する方法です。C#のリストをマーシャリングする方法
C#で
C#のリストはList<string>MyList
であり、C++のコードではlist<wstring>cppList
として受け付けています。これはmarshalasを使用する方法です。C#のリストをマーシャリングする方法
C#で
ネイティブコードとマネージコードとの間の複合型マーシャリングを使用しないことが常に賢明です。 List
の場合、これらのタイプは、アイテムごとに異なるメモリレイアウトを持つため、完全に異なります。
したがって、文字列(char *)の配列を受け入れ、ネイティブのList
を手作業で作成し、最終的に目的のメソッドを呼び出すネイティブdllにユーティリティ関数を書き込むことをお勧めします。そのユーティリティ関数のラッパーを作成するのは簡単です。
strings
はwstrings
(2つのバイトのUnicode文字列)あるおかげで、そう、あなたが言うことが本当ならば、特別な変換が必要ありません。
これは個々の文字列ではなく文字列のリストです。 –
C#の 'string'は実際にはUTF-16 Unicode文字列です。しかし、C++の 'wstring'はそうではありません。 Unicodeも2バイト文字もありません。 –
@Martinho:Windows上にあります。 – Puppy
C#は複雑なC++型をP/Invokeできません。 C++/CLIを使用する必要がありますが、それらをマーシャリングする方法があるかもしれません。それ以外の場合は、各文字列を個別にマーシャリングする必要があります。
私はこのためにマーシャルを使用することはできません。 C#の 'List'は連続していますが、C++の' list'はリンクされたリストです。 C#の 'List'は 'ベクトル'のようなものです。 –