我用ALT做了一个ActiveX,加到WEB中了,打开网页时ActiveX可以被正常加载,但一点按钮调用ActiveX里的方法时就出"加载时出错"的错误.点详细按钮会调出"加载项管理|的窗口.我写的ActiveX控件在最上边,状态为有效.这个ActiveX在Helow World级别的时候运行正常,但我添加了"#import   "shdocvw.dll""并写了些复杂的语句后就出错了.我怀疑是不是我用VC6的ReleaseMinSize生成的DLL里没把shdocvw.dll包进来啊?
我刚学VC有很多东西不很清晰,希望我把我的问题描写清楚了.

解决方案 »

  1.   

    dll是动态连接的,发布时应该带上
      

  2.   

    刚才仔细查了一下程序一执行到pDoc2->get_title(&bstrTitle);这句的时候就出上面说的错.为什么???
    CComPtr<IDispatch> spDispatch;
    CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2; // TODO: Add your implementation code here
    SHDocVw::IShellWindowsPtr m_spSHWinds;
    m_spSHWinds.CreateInstance (__uuidof(SHDocVw::ShellWindows)); 
    long nCount = m_spSHWinds->GetCount();  for (int i = 0; i < nCount; i++){
    IDispatchPtr spDisp; 
    _variant_t va = (long) i;
    spDisp = m_spSHWinds->Item(va); SHDocVw::IWebBrowser2Ptr spBrowser(spDisp); 

    if (spBrowser) {
    if (SUCCEEDED(spBrowser->get_Document( &spDispatch))) {
    pDoc2 = spDispatch;
    CComBSTR bstrTitle;
    pDoc2->get_title(&bstrTitle);

    }

    } }
      

  3.   

    检查下 pDoc2 = spDispatch 转换成功了没?
      

  4.   

    pDoc2 = spDispatch;
    if( NULL != pDoc2 )
    {
        CComBSTR bstrTitle;
        pDoc2->get_title(&bstrTitle);
    }if(FAILED(spBrowser->get_Document(&spDispatch)))return 0;
    CComQIPtr<IHTMLDocument2, &IID_IHTMLDocument2> pDoc2;
    if(FAILED(spDispatch->QueryInterface(IID_IHTMLDocument2,(void **)&pDoc2)))return 0; 
      

  5.   

    谢谢hqulyc的代码, 这两天太忙,刚刚试了一下,pDoc2 = spDispatch 转换不成功.
    if(FAILED(spDispatch->QueryInterface(IID_IHTMLDocument2,(void **)&pDoc2)))return 0;
    这句返回0,怎么才能转换成功呢?希望能再给点意见,谢谢!!!
      

  6.   

    补充一下:
    pDoc2是NULL啊!
    既然if (SUCCEEDED(spBrowser->get_Document( &spDispatch))) 通过了就应该说明&spDispatch取到值了,那么pDoc2 = spDispatch;为什么不能给pDoc2赋值呢?