C# 如何在C语言中封送列表# 我必须把一个C语言列表发送到C++。C列表是 ListMyList,C++代码接受它为代码> ListCPPLISTIS/COM>。

C# 如何在C语言中封送列表# 我必须把一个C语言列表发送到C++。C列表是 ListMyList,C++代码接受它为代码> ListCPPLISTIS/COM>。,c#,c++,interop,C#,C++,Interop,谢谢 字符串< /COD>在C中是 WSstring < /Code >(2字节Unicode字符串),因此如果你所说的是真的,那么就不需要特殊的转换。 C不能调用复杂的C++类型。您必须使用C++/CLI,因为他们可能有一种方法可以将其编组。否则,您必须逐个封送每个字符串。明智的做法是不要在本机代码和托管代码之间使用复杂类型封送。 对于列表,这些类型完全不同,因为它们对每个项目都有不同的内存布局 因此,最好的方法是在接受字符串数组(char*)的本机dll中编写一个实用程序函数,然后手动构建本

谢谢

<代码>字符串< /COD>在C中是 WSstring < /Code >(2字节Unicode字符串),因此如果你所说的是真的,那么就不需要特殊的转换。

C不能调用复杂的C++类型。您必须使用C++/CLI,因为他们可能有一种方法可以将其编组。否则,您必须逐个封送每个字符串。

明智的做法是不要在本机代码和托管代码之间使用复杂类型封送。 对于
列表
,这些类型完全不同,因为它们对每个项目都有不同的内存布局


因此,最好的方法是在接受字符串数组(char*)的本机dll中编写一个实用程序函数,然后手动构建本机
列表
,并最终调用所需的方法。您可以很容易地创建该实用程序函数的包装器。

我怀疑您是否可以使用MarshalAs来完成此操作。C<代码>列表是连续的,而C++ <代码>列表<代码>是链表。C#的
列表
更像
向量
。它是一个字符串列表,而不是单个字符串。C#
字符串
实际上是一个UTF-16 Unicode字符串。不过,C++的
wstring
不是。既不是Unicode字符,也不是2字节字符。@Martinho在Windows
wstring
上是保存UTF-16字符串的自然方式。