如何将C#中的字符串[]调用到C ++

时间:2014-02-12 10:50:28

标签: c# c++-cli

我在C#中有以下功能。

public static string[] StringValue()
{
       .....
       return MyString;
}

我正在尝试使用

在C ++中调用该函数
array<String^>^ MyString;
MyString = MyClass.StringValue();   

for(int iter=0; iter < MyString->Length; iter++)
{       
    printf("%s", MyString[iter]);       
}

MyString[iter]的价值不合适。调试时在C#中是正确的。 MyString的长度正在变得合适,但不是值。

3 个答案:

答案 0 :(得分:2)

printf("%s", MyString[iter]);

这需要一个指向空终止数组char的指针。并MyString[iter]肯定不是那样。由于您有一个托管字符串,因此在C ++ / CLI程序集中,您可以像这样输出:

Console::WriteLine(MyString[iter]);

答案 1 :(得分:1)

print是一个C函数,除非确实需要,否则在C ++ / CLI代码中是非常不合适的。

auto myStrings = MyClass::StringValues();
for each (auto s in myStrings) {
    Console::WriteLine(s);
}

使用字符串非常困难,但.NET使其变得更容易。如果可以,请将它们保存在.NET中。否则,您将不得不处理不同的字符集,编码,数据结构,内存分配和所有权转移约定。

答案 2 :(得分:0)

而不是

printf("%s", MyString[iter]);

尝试使用

for ( int i = 0; i < MyString[iter].Length; i++ )   
   std::wcout << MyString[iter][i];

编辑:您可以使用

System::Console::WriteLine( MyString[iter] );