C++ cli 给StreamWriter一个std::字符串以编写txt文件

C++ cli 给StreamWriter一个std::字符串以编写txt文件,c++-cli,streamwriter,c++-standard-library,C++ Cli,Streamwriter,C++ Standard Library,我想给visual c中的Stream Writer writeline方法一个字符串作为参数++ StreamWriter^ sw = gcnew StreamWriter("Positive Sample.txt"); string Loc = "blabla"; sw->WriteLine(Loc); 它生成错误-重载函数的任何实例都不匹配参数列表WriteLine方法接受CLI的字符串,而不是std的字符串 StreamWriter^ sw = gcnew StreamWri

我想给visual c中的Stream Writer writeline方法一个字符串作为参数++

StreamWriter^ sw = gcnew StreamWriter("Positive Sample.txt");

string Loc = "blabla";

sw->WriteLine(Loc);

它生成错误-重载函数的任何实例都不匹配参数列表

WriteLine
方法接受CLI的字符串,而不是std的字符串

StreamWriter^ sw = gcnew StreamWriter("Positive Sample.txt");

String^ Loc = "blabla";

sw->WriteLine(Loc);
您可以使用
System::Runtime::InteropServices::Marshal::PtrToStringAnsi
将C字符串封送到
字符串
,也可以将C字符串传递到字符串的构造函数中:

string Loc = "blabla";
String^ strLoc = gcnew String(Loc.c_str());
编辑

正如Ben在评论中指出的,您应该使用
marshall_As
而不是
PtrToStringAnsi

来自的示例(可以找到反向操作)

//marshal\u as\u test.cpp
//使用:/clr编译
#包括
#包括
#包括
使用名称空间系统;
使用名称空间msclr::interop;
int main(){
const char*message=“要封送的测试字符串”;
字符串^result;
结果=封送(消息);
返回0;
}

请避免使用
PtrToStringAnsi
。C++/CLI具有更好的
marshal_as
template框架。@BenVoigt谢谢,我将添加注释。我不是C++/CLI专家,所以我在谷歌上搜索过,但PtrToStringAnsi是最初几个结果中的第一个。不幸的是,许多关于C++/CLI的在线信息都是由不熟悉C++/CLI的人编写的,他们发现了一个黑客解决方案,甚至没有意识到有更干净的方法。反向转换尤其糟糕,许多投票率很高的答案都不好(在两种方法都是在问题还没有解决时提出的问题上,
marshal_as
方法以压倒性优势获胜)当我试图包含marshal.h头文件时,WC\u NO\u BEST\u FIT\u CHARS出现错误:未声明的标识符。我试图通过使用堆栈溢出回复来解决它,但失败了。“救救我!”狼獾说。
// marshal_as_test.cpp
// compile with: /clr
#include <stdlib.h>
#include <string.h>
#include <msclr\marshal.h>

using namespace System;
using namespace msclr::interop;

int main() {
   const char* message = "Test String to Marshal";
   String^ result;
   result = marshal_as<String^>( message );
   return 0;
}