小弟调试技巧实在有限,不知道我的程序里具体哪行出错了,只知道是atlbase.h里的469行那里过不了assert关,
T** operator&()
{
ATLASSERT(p==NULL); // 469行
return &p;
}请大家指教,智能指针的使用哪里出问题了?代码如下:void OnLogin()
{
_variant_t v;
HRESULT hr;
VARIANT id, index;
CComPtr<IDispatch> spDispatch;
CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;
CComQIPtr<IHTMLElement, &IID_IHTMLElement> pElement;
CComQIPtr<IHTMLElementCollection,&IID_IHTMLElementCollection> pElementCol;
CComPtr<IHTMLInputTextElement> pInputTextElement;
if (m_spSHWinds == NULL) {
hr = m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows));
if (FAILED(hr)){
MessageBox("Failed");
CoUninitialize();
}
}
if (m_spSHWinds) {
long n=0;
m_spSHWinds->get_Count(&n); //得到浏览器的个数
//遍历每一个浏览器
for (long i = 0; i < n; i++) {
CComPtr<IDispatch> spDisp;
v = (long)i;
spDisp =m_spSHWinds->Item(&v);
SHDocVw::IWebBrowser2Ptr spBrowser(spDisp); //生成一个IE窗口的智能指针
if (spBrowser) {
//获取IHTMLDocument2接口
if (SUCCEEDED(spBrowser->get_Document( &spDispatch)))
pDoc2 = spDispatch;
if(pDoc2!=NULL) {
//获取所有元素的集合
if(SUCCEEDED(pDoc2->get_all(&pElementCol))){
long p=0;
if(SUCCEEDED(pElementCol->get_length(&p))) {
if(p!=0){
//遍历所有元素
for(long i=0;i<p;i++){
V_VT(&id) = VT_I4;
V_I4(&id) = i;
V_VT(&index) = VT_I4;
V_I4(&index) = 0;
if(SUCCEEDED(pElementCol->item(id,index, &spDispatch))) { //应该就这附近的几行错误吧
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLElement,(void**)&pElement))) { //应该就这附近的几行错误吧
if(SUCCEEDED(pElement->QueryInterface(IID_IHTMLInputTextElement,(void**)&pInputTextElement))) {
CComBSTR strName("csdn"); //用户名
CComBSTR strPwd("123456"); //密码
CComBSTR type; //输入框类型 pInputTextElement->get_type(&type);//获取输入框类型
CString strtype(type);
strtype.MakeUpper();
if (lstrcmpi(strtype, _T("TEXT")) == 0) {
pInputTextElement->put_value(strName);//设置文本框的值(用户名)
}
if (lstrcmpi(strtype, _T("PASSWORD")) == 0) {
pInputTextElement->put_value(strPwd);//设置文本框的值(密码)
} } }
}
}
}
}
}
}
}
}
}
}
T** operator&()
{
ATLASSERT(p==NULL); // 469行
return &p;
}请大家指教,智能指针的使用哪里出问题了?代码如下:void OnLogin()
{
_variant_t v;
HRESULT hr;
VARIANT id, index;
CComPtr<IDispatch> spDispatch;
CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;
CComQIPtr<IHTMLElement, &IID_IHTMLElement> pElement;
CComQIPtr<IHTMLElementCollection,&IID_IHTMLElementCollection> pElementCol;
CComPtr<IHTMLInputTextElement> pInputTextElement;
if (m_spSHWinds == NULL) {
hr = m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows));
if (FAILED(hr)){
MessageBox("Failed");
CoUninitialize();
}
}
if (m_spSHWinds) {
long n=0;
m_spSHWinds->get_Count(&n); //得到浏览器的个数
//遍历每一个浏览器
for (long i = 0; i < n; i++) {
CComPtr<IDispatch> spDisp;
v = (long)i;
spDisp =m_spSHWinds->Item(&v);
SHDocVw::IWebBrowser2Ptr spBrowser(spDisp); //生成一个IE窗口的智能指针
if (spBrowser) {
//获取IHTMLDocument2接口
if (SUCCEEDED(spBrowser->get_Document( &spDispatch)))
pDoc2 = spDispatch;
if(pDoc2!=NULL) {
//获取所有元素的集合
if(SUCCEEDED(pDoc2->get_all(&pElementCol))){
long p=0;
if(SUCCEEDED(pElementCol->get_length(&p))) {
if(p!=0){
//遍历所有元素
for(long i=0;i<p;i++){
V_VT(&id) = VT_I4;
V_I4(&id) = i;
V_VT(&index) = VT_I4;
V_I4(&index) = 0;
if(SUCCEEDED(pElementCol->item(id,index, &spDispatch))) { //应该就这附近的几行错误吧
if(SUCCEEDED(spDispatch->QueryInterface(IID_IHTMLElement,(void**)&pElement))) { //应该就这附近的几行错误吧
if(SUCCEEDED(pElement->QueryInterface(IID_IHTMLInputTextElement,(void**)&pInputTextElement))) {
CComBSTR strName("csdn"); //用户名
CComBSTR strPwd("123456"); //密码
CComBSTR type; //输入框类型 pInputTextElement->get_type(&type);//获取输入框类型
CString strtype(type);
strtype.MakeUpper();
if (lstrcmpi(strtype, _T("TEXT")) == 0) {
pInputTextElement->put_value(strName);//设置文本框的值(用户名)
}
if (lstrcmpi(strtype, _T("PASSWORD")) == 0) {
pInputTextElement->put_value(strPwd);//设置文本框的值(密码)
} } }
}
}
}
}
}
}
}
}
}
}
解决方案 »
- 请各位大神帮我看下这代码的问题
- 关于post数据包操作の数据包构造问题?
- VC自带日历控件不能正常显示
- CEdit设置只读风格的宏是啥?如何在程序中设置只读,最好通过修改风格的方式?
- 请问在多Frame页面中,如何捕获嵌入的Frame中页面元素的DISPID_HTMLDOCUMENTEVENTS2_ONKEYUP事件?
- 求助,编译时遇到的问题!
- 想投稿,可惜搜索不到计算机核心刊物的网址,哪位仁兄能告诉我《计算机应用与软件》的网址吗?急
- 请软件高手加盟项目开发,5000元/20天
- ***如何向可编辑控件中加入字符串的问题***(急!!!如解决可继续加分)
- 用vc++编写Excel应用程序
- [提问]CToolTipCtrl使用问题
- 关于windows服务的使用?
加一句
pElement.Release();
"QueryInterface前 pElement智能指针需要Release
加一句
pElement.Release();"
没有起作用,问题依旧...