Так попробуй. Если заработает, то имеет смысл создать метод, который конвертирует Си-строки в управляемые последовательности символов в кодировке UTF-16. Входная кодировка должна быть однобайтовой и зависит от текущей кодовой страницы. Возможно, потребуется кодовую страницу изменить, если конечный результат вывода строка не соответствует ожидаемому.
#include <msclr/marshal_cppstd.h>
using namespace System;
using namespace System::Runtime::InteropServices;
int main() {
const char* hello = "Привет, мир!";
System::String^ line = Marshal::PtrToStringAnsi(IntPtr((void*)hello));
Console::WriteLine(line);
}
Что-то, типа, такого...
#include <msclr/marshal_cppstd.h>
using namespace System;
using namespace System::Runtime::InteropServices;
System::String^ convert(const char* cstr) {
return Marshal::PtrToStringAnsi(IntPtr((void*)cstr));
}
System::String^ convert(const wchar_t* wstr) {
return Marshal::PtrToStringUni(IntPtr((void*)wstr));
}
int main() {
const char* hello = "Привет, мир!";
System::String^ line = convert(hello);
Console::WriteLine(line);
const wchar_t* goodbye = L"До свидания!";
line = convert(goodbye);
Console::WriteLine(line);
}