关于IWebBrowser2Ptr::GetLocationURL()函数报错的问题.

「已注销」 2012-12-21 03:12:32
#include "stdafx.h"
#include <iostream>
#import <shdocvw.dll>
#include "shlwapi.h"
#include <mshtml.h>
#import <mshtml.tlb>
#include <string>
using namespace std;
int main(){
CoInitialize(0);
SHDocVw::IShellWindowsPtr m_spSHWinds;

if (m_spSHWinds == NULL){
if (m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK){

CoUninitialize();

}
}
if (m_spSHWinds){
int n = m_spSHWinds->GetCount();
for (int i = 0; i < n; i++){
//_variant_t v = (long)i;
_variant_t v(long(i), VT_I4);

IDispatchPtr spDisp = m_spSHWinds->Item(v);

SHDocVw::IWebBrowser2Ptr spBrowser(spDisp); //生成一个IE窗口的智能指针
if (spBrowser){
_bstr_t bsName;
bsName = spBrowser->GetLocationURL(); //中断
spBrowser->AddRef();
void * pData = spBrowser;
string s=bsName;
cout<<s<<endl;
if(s=="http://www.baidu.com/"){
IDispatchPtr p=spBrowser->GetDocument();
MSHTML::IHTMLDocument2Ptr d;
p.QueryInterface(IID_IHTMLDocument2,&d);
MSHTML::IHTMLElementPtr e;
d->get_body(&e);
BSTR text;
e->get_innerHTML(&text);
char *s=_com_util::ConvertBSTRToString(text);
cout<<s<<endl;
}
}
}
}

CoUninitialize();
return 0;
}

小弟不太懂COM技术,不过正在做的一个东西需要用到相关方面的知识,无奈就在找一些例子学习。如上代码,可以正常编译通过,可以得到EXPLORER.EXE的spDisp,并可正常访问GetLocationURL得到路径。但是当spDisp是IE的时候,spBrowser->GetLocationURL()就会引发中断,调试过程各个变量均有值.
spBrowser->GetLocationURL()会转到下面这个库文件去执行。

然后引发中断,_hr的值为服务器不可用.


请问如何修改代码能正常执行.
环境是VS2010 WINXP IE8
...全文
149 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2012-12-21
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
操作IE ,你应该用BHO等方式,比较适合
版主,你就给指条明路吧,就现在的代码,怎么改可以成功。 BHO也有问题,我在另个贴子里也回复你了,你也没答.
oyljerry 2012-12-21
  • 打赏
  • 举报
回复
操作IE ,你应该用BHO等方式,比较适合

3,245

社区成员

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

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