.NET C++ преобразовывает Систему:: Строка к станд.:: строка

Я также назначил бы 3D мышь. Существует несколько вариантов в существовании с начала 1990-х. Для любого работающего с 3D, вещами как SpaceNavigator делают жизнь намного легче. (Правовая оговорка: я не аффилирован с 3Dconnexion всегда, просто удовлетворен и теперь RSI-свободный пользователь.)

53
задан Joel Coehoorn 19 August 2009 в 04:37
поделиться

3 ответа

Существует более чистый синтаксис, если вы используете последнюю версию .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 статья для различных других преобразований

65
ответ дан 7 November 2019 в 08:34
поделиться
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;
  }
6
ответ дан 7 November 2019 в 08:34
поделиться

И в ответ на «более простой способ» в более поздних версиях 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;
}

28
ответ дан 7 November 2019 в 08:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: