- PR -

OLEで取得した文字列をUnicodeで扱う方法について

1
投稿者投稿内容
たくぽん
会議室デビュー日: 2006/10/18
投稿数: 10
投稿日時: 2006-11-01 11:28
はじめまして
VC++にてOLEにてExcelを起動し文字列の取得を行っています。
取得した文字列をUnicodeとしてCStringに格納したいのですがうまくいきません。

どうすればUnicodeのまま扱うことが出来るのでしょうか?
もしご存知の方おられればご教授ください。

よろしくお願いします。

--------------コード抜粋---------------------
long ix[2];
COleVariant result;
CString strValue;

int nRowCnt, nColCnt;
for(nRowCnt = 1; nRowCnt <= m_nMaxRow; nRowCnt++)
{
  ix[0] = nRowCnt;
  for(nColCnt = 1; nColCnt <= m_nMaxCol; nColCnt ++)
  {
    ix[1] = nColCnt;
    saRet.GetElement(ix, (void *)&result);  ←値を取得
    result.ChangeType(VT_BSTR);       ←変換?
    strValue = result.bstrVal;  ←ここでUnicodeのまま保存したい
  }
}


いまさらながらですが
VC++5.0SP3
Excel2000にて作業しています。


[ メッセージ編集済み 編集者: たくぽん 編集日時 2006-11-01 11:29 ]
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-11-01 11:34
CStringはTCHAR用の文字列クラスです。
TCHAR型がchar型として扱われるコンパイルオプション(=文字セット→マルチバイト文字セット)
である場合、CStringにUnicode文字列を格納するのは不可能です。

素直に、CComBSTRクラスや_bstr_tクラスを使うべきでしょう。

もしくは、TCHAR型がwchar_tとして扱われるコンパイルオプション(=文字セット→Unicode文字セット)
にするかして対応する。
ただし、TCHARを意識しないコード(_Tマクロを使っていないとか)である場合対応はカナリ大変になります。


VC++5.0SP3 より 上のコンパイルオプションに関する点は VC2002以降として回答してしまいましたので、参考にしないでください。
VC++6.0であれば、
http://rararahp.cool.ne.jp/vc/vctips/unicode.htm#unicode
のようにすればいいのですが、VC++5.0はわかりません。


[ メッセージ編集済み 編集者: Blue 編集日時 2006-11-01 11:37 ]
たくぽん
会議室デビュー日: 2006/10/18
投稿数: 10
投稿日時: 2006-11-02 13:20
Blueさん 回答ありがとうございます。
なぜか格納することが出来ないかがよくわかりました。

本日コンパイルオプションについては試してみたのですが
_T(をつかってない場所がかなりあり、修正がかなり大変になってしまいそうなので
CComBSTRクラスや_bstr_tクラスかWebを参考にさせてもらいたいと思います。

がんばってみます。
1

スキルアップ/キャリアアップ(JOB@IT)