为什么vs2005下IHTMLDocument3的getElementById会出错?

gnhao2 2009-12-24 09:21:35
下边就是vs2005中的代码.我用的是Webbrowser控件。//pHtmlDoc3->get_documentElement(&elment)这一句可以正确执行。
但是getElementById不行。我用过unicode与multe-byte都不行。哪位大哥知道啥原因?这个id在html中是有的。。哎


void CdDlg::DocumentCompleteExplorer1(LPDISPATCH pDisp, VARIANT* URL)
{
// TODO: Add your message handler code here
CString url(URL->bstrVal);
IHTMLElement * elment;
if ("http://localhost/"==url)
{
IHTMLDocument3* pHtmlDoc3=(IHTMLDocument3*)m_wb.get_Document();
if (NULL!=pHtmlDoc3)
{
BSTR s;

pHtmlDoc3->getElementById(_T("Tbody"),&elment);
//pHtmlDoc3->get_documentElement(&elment)
elment->get_outerHTML(&s);

CString title(s);
MessageBox(title);


}
else
{
MessageBox(_T("a"));
}
}
}
...全文
1052 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
whysoft 2010-04-15
  • 打赏
  • 举报
回复
让我说你啥好呢
那个需要的是BSTR ,你来来回回都传的是wchar_t
,显然你还不理解什么叫BSTR .
那算了,直接用:
CComBSTR s;
s = L"Tbody";
然后把s传进去吧.
人家MS都把BSTR包装好了,不用理解了,直接用。
:s
所以说IT不值钱啊。只是跟着别人。
gnhao2 2009-12-25
  • 打赏
  • 举报
回复
晕啊。我在delphi下试了。是可以的
procedure TForm1.wb1DocumentComplete(ASender: TObject; const pDisp: IDispatch;
var URL: OleVariant);
var
doc:IHTMLDocument3;

begin
//
doc:= wb1.Document as IHTMLDocument3;
ShowMessage(doc.getElementById('bbb').outerHTML);
end;
雪影 2009-12-25
  • 打赏
  • 举报
回复
IHTMLDocument3* pHtmlDoc3=(IHTMLDocument3*)m_wb.get_Document();


get_Document返回的接口类型是IDispatch*类型,需要使用QueryInterface做类型转换
gnhao2 2009-12-24
  • 打赏
  • 举报
回复
element提取的地方getelemntByid的地方出错。不是getouterhtml出错。

、、、、、、、、、、、、、、、、、、、、、、
BSTR id= ::SysAllocString(L"Tbody");
BSTR s;
这个方法我也试过。
报错:
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

哪位大哥有条件试一下?
gnhao2 2009-12-24
  • 打赏
  • 举报
回复
ll
MoXiaoRab 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tttyd 的回复:]
elment->get_outerHTML(&s);

----->
if(elment)
    elment->get_outerHTML(&s);
[/Quote]
同意
我怀疑你Element没取到
MoXiaoRab 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gnhao2 的回复:]
我试过L也是不行。(我用过unicode与multe-byte都不行)
报错:
Unhandled exception at 0x7cdee05c in d.exe: 0xC0000005: Access violation writing location 0x00426180.

可是明明有这个ID。。。
[/Quote]
element能取到么?
雪影 2009-12-24
  • 打赏
  • 举报
回复
elment->get_outerHTML(&s);

----->
if(elment)
elment->get_outerHTML(&s);
gnhao2 2009-12-24
  • 打赏
  • 举报
回复
我试过L也是不行。(我用过unicode与multe-byte都不行)
报错:
Unhandled exception at 0x7cdee05c in d.exe: 0xC0000005: Access violation writing location 0x00426180.

可是明明有这个ID。。。
雪影 2009-12-24
  • 打赏
  • 举报
回复
            BSTR id= ::SysAllocString(L"Tbody");
BSTR s;

pHtmlDoc3->getElementById(id,&elment);//第一个变量类型为BSTR字符串
//pHtmlDoc3->get_documentElement(&elment)
elment->get_outerHTML(&s);

CString title(s);
MessageBox(title);
SysFreeString(id);
sandyandy 2009-12-24
  • 打赏
  • 举报
回复
pHtmlDoc3->getElementById(L"Tbody",&elment);
gnhao2 2009-12-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 aa3000 的回复:]
m_wb 是什么对象?
[/Quote]
Webbrowser控件


估计是 pHtmlDoc3 指针搞错了
得到了这个指针了的。为啥用不起泥?
get_documentElement能执行成功

但就是getelementbyid不行
aa3000 2009-12-24
  • 打赏
  • 举报
回复
估计是 pHtmlDoc3 指针搞错了
aa3000 2009-12-24
  • 打赏
  • 举报
回复
m_wb 是什么对象?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧