Я также назначил бы 3D мышь. Существует несколько вариантов в существовании с начала 1990-х. Для любого работающего с 3D, вещами как SpaceNavigator делают жизнь намного легче. (Правовая оговорка: я не аффилирован с 3Dconnexion всегда, просто удовлетворен и теперь RSI-свободный пользователь.)
Существует более чистый синтаксис, если вы используете последнюю версию .net
#include "stdafx.h"
#include <string>
#include <msclr\marshal_cppstd.h>
using namespace System;
int main(array<System::String ^> ^args)
{
System::String^ managedString = "test";
msclr::interop::marshal_context context;
std::string standardString = context.marshal_as<std::string>(managedString);
return 0;
}
Это также дает вам лучшую очистку от исключений.
Существует ] msdn статья для различных других преобразований
stdString = toss(systemString);
static std::string toss( System::String ^ s )
{
// convert .NET System::String to std::string
const char* cstr = (const char*) (Marshal::StringToHGlobalAnsi(s)).ToPointer();
std::string sstr = cstr;
Marshal::FreeHGlobal(System::IntPtr((void*)cstr));
return sstr;
}
И в ответ на «более простой способ» в более поздних версиях C ++ / CLI, вы можете сделать это без marshal_context. Я знаю, что это работает в Visual Studio 2010; не уверен до этого.
#include "stdafx.h"
#include <string>
#include <msclr\marshal_cppstd.h>
using namespace msclr::interop;
int main(array<System::String ^> ^args)
{
System::String^ managedString = "test";
std::string standardString = marshal_as<std::string>(managedString);
return 0;
}