小弟调试技巧实在有限,不知道我的程序里具体哪行出错了,只知道是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);//设置文本框的值(密码)
                  }    }                  }
     }
}
   }
}
    }
   }
   
     }
   }
   }
}