aboutsummaryrefslogtreecommitdiff
path: root/libs/installer_omod/src/interop/StdDotNetConverters.cpp
blob: be7497b7677e85a499f74a07a9bee4af8b9eb101 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "stdDotNetConverters.h"

#include <stdexcept>

#include <msclr\marshal_cppstd.h>

std::wstring toWString(System::String^ string)
{
  if (string)
    return msclr::interop::marshal_as<std::wstring>(string);
  return L"null .NET string";
}

System::String^ toDotNetString(const std::wstring& wString)
{
  return msclr::interop::marshal_as<System::String^>(wString);
}

std::string toUTF8String(System::String^ string)
{
  if (string)
  {
    array<unsigned char>^ utf8 = System::Text::Encoding::UTF8->GetBytes(string);
    std::string stdstring;
    stdstring.resize(utf8->Length);
    System::Runtime::InteropServices::Marshal::Copy(utf8, 0, System::IntPtr(stdstring.data()), utf8->Length);
    return stdstring;
  }
  return "null .NET string";
}

std::exception toStdException(System::Exception^ exception)
{
  return std::runtime_error("Unhanded .NET Exception: " + toUTF8String(exception->ToString()));
}