2011-03-10 95 views
4

有没有办法通过它我们可以从C得到的字符串的集合++到C#如何在托管代码(C#)获取字符串数组从本机代码(C++)

C#代码

[DllImport("MyDLL.dll")] 
private static extern List<string> GetCollection(); 
public static List<string> ReturnCollection() 
{ 
    return GetCollection(); 
} 

C++代码

std::vector<string> GetCollection() 
{ 
std::vector<string> collect; 
return collect; 
} 

上面的代码只用于样品,主要目的是从C++得到集合中C#,并且帮助将不胜感激

// Jame S

回答

4

有很多方法来解决这个众多,但它们都比你现在拥有的要复杂得多。

将C++中分配的字符串传递给C#的最简单方法可能是BSTR。这允许您在C++中分配字符串,并让C#代码将其释放。这是你面临的最大挑战,因为BSTR可以轻松解决。

由于您想要一个字符串列表,您可以将其更改为编组为BSTR的数组。这是一种方式,这可能是我会采取的路线,但还有很多其他方法。

1

我建议你把它改成数组,然后封送它。在PInvoke中编组数组更容易,实际上我不相信C++类类可以被编组。

3

尝试使用,而不是

C#部分

[DllImport("MyDLL.dll")] 
private static extern void GetCollection(ref string[] array, uint size); 

C++部分

void GetCollection(string * array , uint size) 

和GetCollection功能填补阵列

+0

这不会奏效。想想谁分配和释放字符串。 – 2011-03-10 10:56:25

3

我认为你必须把它转换成更多C#友好的东西,比如C风格的数组charwchar_t C风格的字符串。 Here你可以找到一个std::string编组的例子。并且here你会发现关于如何编组std::vector的讨论。

相关问题