7

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

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

...但我真的很难将我闪亮的 System::String^ 转换为兼容的东西。基本上我希望通过执行以下操作来调用:

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

3 回答 3

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

来自开发棚

于 2009-07-08T14:31:09.593 回答
11

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

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

于 2009-07-08T14:40:46.507 回答
1

在 C++ 编组概述中列出了哪些类型需要进行哪些转换。

于 2009-07-09T08:44:31.393 回答