掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
IHTMLTxtRange::findText後に落ちてしまう (ID:61791)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
http://www.codeproject.com/miscctrl/chtmlview_search.asp 上記のコードプロジェクトのソースについてお聞きしたいことがあります。 CHtmlView内で単語を検索して反転表示させるというものなのですが、 デバッグ版ではとくに問題は無いのですけど、リリース版では落ちるよう になってしまいました(いつの時点からかわからないのですが…) 問題箇所のソースです ======================================================= void CCHtmlView_SearchView::FindText(CString searchText, long lFlags /* =2 */, BOOL bNNF /* =FALSE (for internal use)*/) { static CString sLastSearch; static BSTR lastBookmark = NULL; if(sLastSearch != searchText) lastBookmark = NULL; sLastSearch = searchText; IHTMLDocument2 *lpHtmlDocument = NULL; LPDISPATCH lpDispatch = NULL; lpDispatch = GetHtmlDocument(); ASSERT(lpDispatch); lpDispatch->QueryInterface(IID_IHTMLDocument2, (void**)&lpHtmlDocument); ASSERT(lpHtmlDocument); lpDispatch->Release(); IHTMLElement *lpBodyElm; IHTMLBodyElement *lpBody; IHTMLTxtRange *lpTxtRange; lpHtmlDocument->get_body(&lpBodyElm); ASSERT(lpBodyElm); lpHtmlDocument->Release(); lpBodyElm->QueryInterface(IID_IHTMLBodyElement,(void**)&lpBody); ASSERT(lpBody); lpBodyElm->Release(); lpBody->createTextRange(&lpTxtRange); ASSERT(lpTxtRange); lpBody->Release(); CComBSTR search(searchText.GetLength()+1,(LPCTSTR)searchText); bool bFound,bTest; long t; if(lastBookmark!=NULL) { lpTxtRange->moveToBookmark(lastBookmark,(VARIANT_BOOL*)&bTest); if(!bTest) { lastBookmark=NULL; lpTxtRange->moveStart((BSTR)CComBSTR("Textedit"),1,&t); lpTxtRange->moveEnd((BSTR)CComBSTR("Textedit"),1,&t); } else { lpTxtRange->moveStart((BSTR)CComBSTR("Character"),1,&t); lpTxtRange->moveEnd((BSTR)CComBSTR("Textedit"),1,&t); } } else { lpTxtRange->moveStart((BSTR)CComBSTR("Textedit"),0,&t); lpTxtRange->moveEnd((BSTR)CComBSTR("Textedit"),1,&t); } lpTxtRange->findText((BSTR)search,0,lFlags,(VARIANT_BOOL*)&bFound); // ←問題箇所 if(!bFound) { if(lastBookmark==NULL && !bNNF) { CString message; message.Format("Cannot find the string: '%s'",searchText); AfxMessageBox(message); } else if(lastBookmark!=NULL) { lastBookmark = NULL; FindText(searchText,lFlags,TRUE); } } else { // ↓ここで落ちています if(lpTxtRange->getBookmark(&lastBookmark)!=S_OK) lastBookmark=NULL; lpTxtRange->select(); lpTxtRange->scrollIntoView(TRUE); } lpTxtRange->Release(); } ======================================================= メッセージボックスなどを出して調べてみましたら、 lpTxtRange->findText後にlpTxtRangeのアクセスを行うと落ちている ようでした。以前はこのようなことは無かった気がしたんですが… この処理自体どこか間違っているのでしょうか? 識者の方々、どうか御教授よろしくお願いします。 (環境 VC++6.0 SP6 Windows XP SP2 MFC使用)
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.