.net - 在 C++/CLI 中 char* 和 System::String 之间转换的最佳方法是什么

标签 .net string c++-cli

在 C++/CLI 中从 char* 转换为 System::string 并返回的批准方法是什么?我在 Google 上发现了一些对 marshal_to<> 模板化函数的引用,但似乎该功能从未适用于 Visual Studio 2005(据我所知,Visual Studio 2008 中也没有)。我还在Stan Lippman's blog上看到了一些代码,但那是2004年的事了。我也见过Marshal::StringToHGlobalAnsi()。有没有一种方法被认为是“最佳实践”?

最佳答案

System::String 有一个接受 char* 的构造函数:

 using namespace system;
 const char* charstr = "Hello, world!";
 String^ clistr = gcnew String(charstr);
 Console::WriteLine(clistr);

取回 char* 有点困难,但也不算太糟糕:

 IntPtr p = Marshal::StringToHGlobalAnsi(clistr);
 char *pNewCharStr = static_cast<char*>(p.ToPointer());
 cout << pNewCharStr << endl;
 Marshal::FreeHGlobal(p);

关于.net - 在 C++/CLI 中 char* 和 System::String 之间转换的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56561/

相关文章:

c# - 您在依赖项中寻找什么来确定它是否应该是一个注入(inject)的依赖项?

python - 在特定扩展名的文件中搜索字符串后提取文件夹名称

c - fgets() 没有扫描我想要的字符串数

visual-studio-2010 - 人们用什么来替换 VS 2010 中缺少的 C++/CLI Intellisense?

c# - 远程服务器返回错误 : (550) on upload file to FTP using FtpWebRequest

c# - 异常会降低性能吗?

java - 如何将不同的行分割成字符串

c# - 托管 C++ 和 C#

c# - C++/CLI 中 C# 的静态类/方法的等价物

c# - 在 switch 语句中我们可以在 C# 中使用枚举吗