Вы также можете заключить исключение в другое И сохранить исходную трассировку стека, передав исключение как Throwable в качестве параметра причины:
try
{
...
}
catch (Exception e)
{
throw new YourOwnException(e);
}
using namespace System::Runtime::InteropServices;
const char* str = (const char*) (Marshal::StringToHGlobalAnsi(managedString)).ToPointer();
От Dev Shed .
Как упоминает mcandre , Marshal :: StringToHGlobalAnsi () является правильным. Но не забудьте освободить вновь выделенный ресурс с помощью Marshal :: FreeHGlobal () , когда строка больше не используется.
В качестве альтернативы вы можете использовать msclr :: interop :: marshal_as шаблон для создания строкового ресурса и автоматического освобождения его, когда вызов выходит из области действия ресурса.
В обзоре маршаллинга в C ++
есть список того, какие типы требуют преобразования.