当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在C++/CLI中转换char*和System::String的最佳方法是什么》经验,为你挑选了2个好方法。

什么是从char*转换为System :: string并返回C++/CLI的批准方式是什么?我在Google上发现了一些对marshal_to <>模板化函数的引用,但看起来这个功能从来没有为Visual Studio 2005做过(而且在Visual Studio 2008中也没有,AFAIK).我还在Stan Lippman的博客上看到了一些代码,但它是从2004年开始的.我还看过Marshal :: StringToHGlobalAnsi().有没有一种被认为是"最佳实践"的方法?



1> Ben Straub..:

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(p.ToPointer());
 cout << pNewCharStr << endl;
 Marshal::FreeHGlobal(p);


与Marsrs提到的`marshal_context`相比,Marshal :: StringToHGlobalAnsi`是一个糟糕的选择,它使用RAII自动释放缓冲区.更不用说名称是完全错误的,它根本不会返回"HGLOBAL".
+1,System :: String构造函数也需要长度和编码!

2> 小智..:

这里有一个很好的概述(为VS2008添加了这个编组支持):http: //www.codeproject.com/KB/mcpp/OrcasMarshalAs.aspx


谢谢,但这是一个冗长的解释.这更加重要:`#include // marshal_context context; // my_c_string = context.marshal_as (my_csharp_string);`
推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有