C+/CLIタイトルの通りで、C++/CLIでC++の文字列とC#の文字列を相互に変換する方法です。コンソールアプリケーションのプロジェクトで動作確認しています。以下のヘッダーをincludeします。関数を使って変換します。付けても正常に処理してくれます。マルチバイト文字をstringで受けたためバッファの中身は以下のように読めない状態になりますがこれで想定通りです。変更しても問題なく処理が完了します。msclr::interop::marshal_as<std::wstring>(cs_string);余談ですが、この時std::wstringのバッファの内容は以下のようになります。}これ、処理上どっち正しいとか存在しないのでないので、その時の仕様に従ってください。C#への変換こちらも上述の関数を呼び出せばいいだけなのですが、パターンがいくつかあります。簡単なのが以下パターンです。msclr::interop::marshal_as<System::String^>(cpp_string);次にプレフィックスにu8が付いている変換方法ですが、以下のようにそのまま設定すると文字化けになります。"縺ゅ≠縺ゅ≠"ネットにはMarshalAsすればいいなどありますが、そういった操作はあまりしたくないので代替案を考案しました。utf-8のバイト配列を取得する取得したバイト配列をC#のEncoding.UTF8のGetStringで処理するこの時、GetStringはarrayでstd::stringをc_str()したり[i]したしするとchar*が取れるので型が違うのを変換します。.NETのbyte[]はCLIの世界だとArrayです。u8enc->GetString(c_array);これでu8_arrayに想定通り文字列が入ります。最後にというか文字列に関係ある型がいろいろあって中に設定されている文字のエンコードと両方を考慮しないといけないのは結構面倒ですね、、、バリエーションがたくさんあるので、普通の開発であれば開発規約で文字列の取り扱いをある程度決定できますが、どの局面でも利用できるような汎用的な操作を一括で提供はなかなか難しいかと思います。»Profile受託ソフト会社員でWin系業務屋。趣味でCocos2d-x/C++を触っています。etc...主に受託・開発ネタ、Windowsの事、Srellaris、ゲーム制作の進捗の事を喋ります。Core3.xとUnityでAES暗号化を利用するC#の標準機能でデータを圧縮・展開するC#で属性を利用して処理に制約の説明を追加するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。