我正在使用C ++ / CLI开发一个应用程序,并且在非托管代码中有一个csv文件编写库,我想从托管部分使用它。所以我的函数看起来像这样:
bool CSVWriter::Write(const char* stringToWrite);
...但我真的很难将我闪亮的System :: String ^转换为兼容的东西。基本上我希望通过做类似的事情来打电话:
if( m_myWriter->Write(String::Format("{0}",someValueIWantToSave)) )
{
// report success
}
答案 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++中有哪些类型需要转换的列表。