【问题标题】:How do I convert a System::String^ to const char*?如何将 System::String^ 转换为 const char*?
【发布时间】:2009-07-08 14:23:43
【问题描述】:

我正在使用 C++/CLI 开发一个应用程序,并有一个非托管代码中的 csv 文件写入库,我想从托管部分使用它。所以我的函数看起来像这样:

bool CSVWriter::Write(const char* stringToWrite);

...但我真的很难将闪亮的 System::String^ 转换为兼容的东西。基本上我希望通过以下方式打电话:

if( m_myWriter->Write(String::Format("{0}",someValueIWantToSave)) )
{
    // report success
}

【问题讨论】:

标签: c++-cli char


【解决方案1】:
using namespace System::Runtime::InteropServices;
const char* str = (const char*) (Marshal::StringToHGlobalAnsi(managedString)).ToPointer();

来自Dev Shed

【讨论】:

  • 缺少元帅::FreeHGlobal(...);这可能会导致内存泄漏。
【解决方案2】:

正如mcandre 提到的,Marshal::StringToHGlobalAnsi() 是正确的。但是不要忘记在字符串不再使用时使用Marshal::FreeHGlobal() 释放新分配的资源。

或者,您可以使用msclr::interop::marshal_as 模板创建字符串资源,并在调用退出资源范围时自动释放它。

【讨论】:

    【解决方案3】:

    overview of marshalling in C++中列出了哪些类型需要哪些转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多