文字列の部分検索

[戻る]
tubaru 2006/12/12(火) 18:10:25
開発環境:Windows XP VC++.net 2003 非MFC

XMLから取り出した要素に、入力した文字が含まれているか検索し、
含まれている場合は取り出した要素をリストボックスに表示するプログラム
をつくっています。
現在のソースは以下のようなものです。

for(i=0; i<n; i++){
   if(strstr(node[i].bstrVal,szBuf)!=NULL)                            ListBox_AddString
(hList1,(_bstr_t)node[i].bstrVal);
}

node[i]にはXMLから取得した要素、szBufには入力した文字が格納されていることは
確認できました。
「オーバーロードのどれも、すべての引数の型を変換できませんでした」というエラー
が表示されるのですが、どのように変更したらよいのでしょうか??

Blue 2006/12/12(火) 19:00:38
>strstr
は BSTR 用ではありません。
wcsstrを使ってください。
(もしくは _bstr_t を介して渡す。strstr(_bstr_t(node[i].bstrVal),szBuf)!=、、、)


また、同様に strcpy や sprintf 等の関数も BSTR 用でありません。
ヘルプを確認して、UNICODEに対応する関数を使うようにしてください。

Blue 2006/12/12(火) 19:06:12
あ、いい忘れましが、
wcsstrを使う場合
>szBuf
は wchar_t型配列として宣言してください。

wchar_t szBuf[] = L"検索文字列"

のように。
もしくは、こちら側を_bstr_tを介すとか。

○szBuf が char型配列である場合
>if(strstr(node[i].bstrVal,szBuf)!=NULL)
↓
if(wcsstr(node[i].bstrVal,_bstr_t(szBuf))!=NULL)


_bstr_tを介すパターンは全て文字コード変換が加わるので
速度的にも落ちるし、Shift_JISに変換できないUnicode文字列もあるという点で
なるべく使わないほうがよいでしょう。

よって
>ListBox_AddString
もあまり好ましくないです。

tubaru 2006/12/13(水) 10:33:14
[[解決]]
_bstr_tを介すことで問題を解決することができました。
ヘルプやネットなどを使ってUNICODEに対応する関数、BSTRについてもうすこし
勉強していきたいと思います。
Blueさんありがとうございました。

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