如何将System :: String ^转换为const char*?

Jon*_*age 7 c++-cli char

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

bool CSVWriter::Write(const char* stringToWrite);
Run Code Online (Sandbox Code Playgroud)

...但我真的很难将我闪亮的System :: String ^转换为兼容的东西.基本上我希望通过做类似的事情来打电话:

if( m_myWriter->Write(String::Format("{0}",someValueIWantToSave)) )
{
    // report success
}
Run Code Online (Sandbox Code Playgroud)

mca*_*dre 13

using namespace System::Runtime::InteropServices;
const char* str = (const char*) (Marshal::StringToHGlobalAnsi(managedString)).ToPointer();
Run Code Online (Sandbox Code Playgroud)

来自Dev Shed.

  • 缺少元帅:: FreeHGlobal(...); 这可能导致内存泄漏. (14认同)
  • @Cedrik,然后发布我的代码的更好版本. (4认同)

Ste*_*idi 12

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

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