UNICODE使用時のCStringからlongへ変換するには

[戻る]
パソマ 2000/11/11(土) 12:50:35
はじめまして!!
どうしても解決できず困っています。
みなさんよろしくお願い致します。

CStringからlongへ変換をしたいのですが、UNICODEを使用している為に
普通に変換できません。

const char *chrValue;
LPSTSTR    strValue;
long       lngValue;

// step1 
// const char* への変換 ←★★ ここが問題だと思います。 ★★
chrValue = (const char*)strValue;

// step2
// long への変換
lngValue = (chrValue);

strValueに12345が入っているとしたら、Step1終了後にchrValueには先頭文字の1しか入っていません。
chrValueに直接12345を入れるとstep2で問題なくlongになる為にstep1が問題だと思います。
環境はWindowsNT4.0(SP6)、VC++6(SP4)、CE Tool Kit for VC++です。
よろしくお願い致します。

パソマ 2000/11/11(土) 14:17:39
[[解決]]
自己レスです。
ヘルプの変換マクロを見つけて
解決しました。

#include <AFXPRIV.H>

long CWinCENaviDlg::CString2Long(CString strValue)
{
    USES_CONVERSION;
    int    intLength;    // CString文字数
    LPWSTR    strWPoint;    // UNICODE文字 
    LPSTR    strAPoint;    // JIS文字

    // 文字数の取得
    intLength = strValue.GetLength();
    
    // 文字ポインタ取得
    strWPoint = strValue.GetBuffer(intLength);

    // UNICODEからJISへ変換
    strAPoint = W2A(strWPoint);

    // バッファ開放
    strValue.ReleaseBuffer();

    return atol(strAPoint);
}

古いスレッドには追加発言できません。