C++/CLI_ C# System::String^ を std:string に変換

msclr::interop::marshal_as<変換したい型> を使う。
マーシャリング:
システムやプログラミング言語の間でデータをやり取りできるようにするための処理。

    // #include <msclr/marshal_cppstd.h>
    System::String^ hoge = gcnew System::String("Hoge");
    std::string getStr = msclr::interop::marshal_as<std::string>(hoge);

逆の場合は型を変える。

 

marshal_as とは

ネイティブ環境マネージ環境間でデータ変換をする。
戻り値は指定した型での値。

マーシャリングライブラリは、複数のヘッダーファイルで構成される。

ex )
上記のコードでは、marshal_cppstd.h をインクルードしたが、
char* から System::String^ へ変換するなら、marshal.h をインクルードする。
関数は同じ marshal_as を使用。

どの変換でも 1 ファイルのインクルードが必要だが、他の変換で必要とされている
追加ファイルをインクルードすることもできる。

 

一部のデータ変換はコンテキストが必要

marshal_context を使用してデータ型を変換する。

マーシャリングにコンテキストが必要なのは、
マネージデータ型からネイティブデータ型にマーシャリングし、
変換先のネイティブ型に自動クリーンアップ用のデストラクターがない場合のみ。

マーシャリングコンテキストは、
デストラクターの中で割り当てられているネイティブデータ型を破棄する。
したがって、
コンテキストを必要とする変換は、コンテキストが削除されるまでのみ有効。
マーシャリングされた値を保存するには、独自の変数に値をコピーする必要がある。

 

 

こちらから。 
https://takachan.hatenablog.com/entry/2017/11/29/200234
https://msdn.microsoft.com/ja-jp/library/bb384859.aspx
https://msdn.microsoft.com/ja-jp/library/bb384865.aspx
https://dictionary.goo.ne.jp/jn/206616/meaning/m0u/

(↓他の方法)
https://support.microsoft.com/ja-jp/help/311259/how-to-convert-from-system-string-to-char-in-visual-c

以上。