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

时间:2009-07-08 14:23:44

标签: c++-cli char

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

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

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

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

3 个答案:

答案 0 :(得分:13)

using namespace System::Runtime::InteropServices;
const char* str = (const char*) (Marshal::StringToHGlobalAnsi(managedString)).ToPointer();

来自Dev Shed

答案 1 :(得分:12)

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

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

答案 2 :(得分:1)

overview of marshalling in C++中有哪些类型需要转换的列表。