我正在用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.
Ste*_*idi 12
正如mcandre提到的那样,Marshal :: StringToHGlobalAnsi()是正确的.但是当字符串不再使用时,不要忘记使用Marshal :: FreeHGlobal()释放新分配的资源.
或者,您可以使用msclr :: interop :: marshal_as模板创建字符串资源,并在调用退出资源范围时自动释放它.