« C++ でシリアル通信クラスを書いてみた | トップページ

2016/11/24

Stringのマネージ ⇒ アンマネージ変換ってこんな感じ

private: System::Void MarshalStringConvert(String^ iStr, std::string& ostr) {
    // マネージ String ⇒ アンマネージ ANSI(char)変換
    using namespace Runtime::InteropServices;
    const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(iStr)).ToPointer();
    ostr = chars;
    Marshal::FreeHGlobal(IntPtr((void*)chars));
}

private: System::Void MarshalStringConvert(String^ iStr, std::wstring& owstr) {
    // マネージ String ⇒ アンマネージ UniCode(wchar)変換
    using namespace Runtime::InteropServices;
    const wchar_t* wchars = (const wchar_t*)(Marshal::StringToHGlobalUni(iStr)).ToPointer();
    owstr = wchars;
    Marshal::FreeHGlobal(IntPtr((void*)wchars));
}

■INIファイルへの保存/取得に使ってみる

    const wchar_t *wcSec;           // セクション
    const wchar_t *wcKey;           // キー
    const wchar_t *wcFile;         // INIファイル名
    wchar_t       wc[70];            // INIファイル読み出し域
    String^       stW;                // 書き込み用
    String^       stR;                // 読み出し結果

    std::wstring    wsStr;             // INIファイル書き込みデータ
    wcSec = L"SECTION2";
    wcKey = L"KEY2";
    wcFile = L"./ski.ini";

    wsStr.clear();                                 // 書き込みデータ初期化
    stW = "INIファイル書込み";               // 書き込みデータ設定

    MarshalStringConvert(stW, wsStr);            // String to wstring変換

    // INIファイルへ出力

    WritePrivateProfileString(wcSec, wcKey, wsStr.c_str(), wcFile);

    // INIファイルから読出し

    GetPrivateProfileString(wcSec, wcKey, L"", wc, sizeof(wc), wcFile);
    stR = gcnew String(wc);

■結果

[SECTION2]
KEY2=INIファイル書き込み

« C++ でシリアル通信クラスを書いてみた | トップページ

VC++」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Stringのマネージ ⇒ アンマネージ変換ってこんな感じ:

« C++ でシリアル通信クラスを書いてみた | トップページ