关于4种方法 https://support.microsoft.com/en-us/help/311259/how-to-convert-from-system-string-to-char-in-visual-c 在VS2015中没有为我工作。我改为遵循这个建议: https://msdn.microsoft.com/en-us/library/d1ae6tz5.aspx 并为方便起见,将其放入功能中。 我偏离了建议的解决方案,它分配了新的内存 对于char * - 我更喜欢把它留给调用者,即使这样 造成额外风险。
#include <vcclr.h> using namespace System; void Str2CharPtr(String ^str, char* chrPtr) { // Pin memory so GC can't move it while native function is called pin_ptr<const wchar_t> wchPtr = PtrToStringChars(str); // Convert wchar_t* to char* size_t convertedChars = 0; size_t sizeInBytes = ((str->Length + 1) * 2); wcstombs_s(&convertedChars, chrPtr, sizeInBytes, wchPtr, sizeInBytes); }
你可以使用 msclr::interop::marshal_context 类:
msclr::interop::marshal_context
#include <msclr/marshal.h>
然后:
String^ something = "something"; msclr::interop::marshal_context ctx; const char* converted = ctx.marshal_as<const char*>(something); system(converted);
缓冲区 converted 将被释放 ctx 超出范围。
converted
ctx
但在您的情况下,调用等效的托管API会更容易:
System::Diagnostics::Process::Start("netsh", "the args");