- - PR -
OLEで取得した文字列をUnicodeで扱う方法について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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 ] |
|
投稿日時: 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-11-02 13:20
Blueさん 回答ありがとうございます。
なぜか格納することが出来ないかがよくわかりました。 本日コンパイルオプションについては試してみたのですが _T(をつかってない場所がかなりあり、修正がかなり大変になってしまいそうなので CComBSTRクラスや_bstr_tクラスかWebを参考にさせてもらいたいと思います。 がんばってみます。 |
1