我的程序也是啊
这个exception反正也不影响运行,放着好了。

解决方案 »

  1.   

    但是realease就挂了丫
    现在我只有用activex控件实现的(还不是动态生成的),没有异常了,但是release下Access Violation。
    但是如果有下面的调用:
    CWebBrowser m_browser;
    m_browser.EnableWindow(TRUE);       ///这句必然出异常。
    m_browser.ShowWindow(TRUE);所以我用debug版的可执行文件打包成安装文件,无奈
      

  2.   

    没有Create,就没有窗口,也就当然要挂,Create后就行了。
      

  3.   

    我是拖的控件到form里头的,这还要create?
      

  4.   

    if(::IsWindow(m_browser.m_hWnd))
    {
    m_browser.EnableWindow(TRUE);      ///no异常。
    m_browser.ShowWindow(TRUE);}
      

  5.   

    早都试过了,create根本就编译通不过的
    除非动态create,结果还是一样if(::IsWindow(m_browser.m_hWnd))
    {
    m_browser.EnableWindow(TRUE);      //一样异常
    m_browser.ShowWindow(TRUE);} 
      

  6.   

    你究竟是用的什么组件?是不是用的“miscosoft web browser"?
      

  7.   

    像这种组件,隐藏或显示窗口最好要调用组件提供的接口,譬如IWebBrowser2组件有一个接口put_Visible可以控制显示或是不显示。
      

  8.   

    miscosoft web browser 是呀
    添加的默认类名是CWebBrowser2萨?
    IWebBrowser2又是哪里来的?
    是com接口吧?
      

  9.   

    miscosoft web browser 是呀
    添加的默认类名是CWebBrowser2萨?
    IWebBrowser2又是哪里来的?
    是com接口吧?
      

  10.   

    CWebBrowser2是IWebBrowser2的一个封装
      

  11.   

    我觉得也是,给点调用这个接口的源码好吗?
    我再来改改看?
    看来非得release得才行呀,没优化的太大了
      

  12.   

    http://www.csdn.net/expert/topic/360/360785.shtm 
      

  13.   

    异常的意思为该派发接口的成员函数没有找到,是不是你的ACTIVEX用的不对,你可以直接插入一个该控件的封装类,然后再用就行了
      

  14.   

    我看了呀,
    加上CoInitialize(NULL); 和CoUninitialize();还是release有异常具体调用的代码和这个贴子里头的用法一样呀,而且我还没用到那么多elment,就一个
    put_Htmlinner
      

  15.   

    WebBrowser有BUG,千万不要用MFC的CWnd函数处理它的隐藏、显示、禁止、激活……你换API函数试试
      

  16.   

    devouer(玩笑一生)我debug下没有异常,也实现功能了,就是release有异常我用chtmlview的时候连debug下都有异常,我看别人用chtmlview的代码也是一样的异常,
    所以我就改用webbrowser来实现,虽然他们的道理是一样的,现在可好,release下的异常死活解决不了,用debug的打包似乎太搞笑了点
    哎,失败!
      

  17.   

    http://www.csdn.net/expert/topic/470/470434.shtm
      

  18.   

    111222(我屁股想吐)我在codeguru上也看到一片贴子说webbrowser有bug,但我找的几份用htmlview的源码(csdn和国外网站找的)都在debug版有异常,这个异常和我自己用htmlview实现下的异常一莫一样,而且还都不影响功能,所以最后我才改用webbrowser的,因为我看的几个用webbrowser的源码窦还出现异常,这个问题也提了好几天了,郁闷!
      

  19.   


    masterz()我看了
    我在视初始化的时侯
    ::EnableWindow(m_browser.m_hWnd,TRUE);
    ::ShowWindow(m_browser.m_hWnd,SW_SHOW);       //这两句不加也debug无异常
    COleVariant noArg;
    m_browser.Navigate(url,&noArg,&noArg,&noArg,&noArg);
    release下执行crash出错退出First-chance exception in UnisnetScanner.exe: 0xC0000005: Access Violation.
      

  20.   

    #include ".\Component\webbrowser2.h"
    /////////////////////////////////////////////////////////////////////////////
    // CAboutBox dialogclass CAboutBox : public CDialog
    {
    // Construction
    public:
    CAboutBox(CWnd* pParent = NULL);   // standard constructor
    virtual ~CAboutBox();
    // Dialog Data
    //{{AFX_DATA(CAboutBox)
    enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA
    // Attributes
    protected:
    CWebBrowser2 m_wndBrowser;
    IWebBrowser2* m_pBrowserApp;
    // Operations
    protected:
    BOOL LoadFromResource(LPCTSTR lpszResource);
    BOOL LoadFromResource(UINT nRes);
    // Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CAboutBox)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL
    void OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags,
    LPCTSTR lpszTargetFrameName, CByteArray& baPostedData,
    LPCTSTR lpszHeaders, BOOL* pbCancel);
    void Navigate(LPCTSTR URL, DWORD dwFlags = 0,
    LPCTSTR lpszTargetFrameName = NULL,
    LPCTSTR lpszHeaders = NULL, LPVOID lpvPostData = NULL,
    DWORD dwPostDataLen = 0);
    void Navigate2(LPITEMIDLIST pIDL, DWORD dwFlags = 0,
    LPCTSTR lpszTargetFrameName = NULL);
    void Navigate2(LPCTSTR lpszURL, DWORD dwFlags = 0,
    LPCTSTR lpszTargetFrameName = NULL, LPCTSTR lpszHeaders = NULL,
    LPVOID lpvPostData = NULL, DWORD dwPostDataLen = 0);
    void Navigate2(LPCTSTR lpszURL, DWORD dwFlags,
    CByteArray& baPostedData,
    LPCTSTR lpszTargetFrameName = NULL, LPCTSTR lpszHeader = NULL);
    virtual void OnAppCmd(LPCTSTR lpszWhere);
    // Implementation
    protected: // Generated message map functions
    //{{AFX_MSG(CAboutBox)
    virtual BOOL OnInitDialog();
    afx_msg void OnBeforeNavigate2Explorer(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flags, VARIANT FAR* TargetFrameName, VARIANT FAR* PostData, VARIANT FAR* Headers, BOOL FAR* Cancel);
    afx_msg void OnDestroy();
    afx_msg void OnDocumentCompleteExplorer(LPDISPATCH pDisp, VARIANT FAR* URL);
    DECLARE_EVENTSINK_MAP()
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    };
    // AboutBox.cpp : implementation file
    //#include "stdafx.h"
    #include "resource.h"
    #include <afxpriv.h>   
    #include <mshtml.h>
    #include <atlbase.h>
    extern CComModule _Module;
    #include <atlcom.h>
    #include <COMDEF.h>
    #include "AboutBox.h"
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    /////////////////////////////////////////////////////////////////////////////
    // CAboutBox dialog
    CAboutBox::CAboutBox(CWnd* pParent /*=NULL*/)
    : CDialog(CAboutBox::IDD, pParent)
    {
    //{{AFX_DATA_INIT(CAboutBox)
    // NOTE: the ClassWizard will add member initialization here
    //}}AFX_DATA_INIT
    m_pBrowserApp = NULL;
    }CAboutBox::~CAboutBox()
    {
    if (m_pBrowserApp != NULL)
    m_pBrowserApp->Release();
    }void CAboutBox::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CAboutBox)
    DDX_Control(pDX, IDC_EXPLORER, m_wndBrowser);
    //}}AFX_DATA_MAP
    }
    BEGIN_MESSAGE_MAP(CAboutBox, CDialog)
    //{{AFX_MSG_MAP(CAboutBox)
    ON_WM_DESTROY()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()BEGIN_EVENTSINK_MAP(CAboutBox, CDialog)
        //{{AFX_EVENTSINK_MAP(CAboutBox)
    ON_EVENT(CAboutBox, IDC_EXPLORER, 250 /* BeforeNavigate2 */, OnBeforeNavigate2Explorer, VTS_DISPATCH VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL)
    ON_EVENT(CAboutBox, IDC_EXPLORER, 259 /* DocumentComplete */, OnDocumentCompleteExplorer, VTS_DISPATCH VTS_PVARIANT)
    //}}AFX_EVENTSINK_MAP
    END_EVENTSINK_MAP()
    /////////////////////////////////////////////////////////////////////////////
    // CAboutBox message handlersBOOL CAboutBox::OnInitDialog() 
    {
    CDialog::OnInitDialog();

    // TODO: Add extra initialization here
    LPUNKNOWN lpUnk = m_wndBrowser.GetControlUnknown();
    HRESULT hr = lpUnk->QueryInterface(IID_IWebBrowser2, (void**) &m_pBrowserApp);
    if (!SUCCEEDED(hr))
    {
    m_pBrowserApp = NULL;
    m_wndBrowser.DestroyWindow();
    DestroyWindow();
    return FALSE;
    }
    //Navigate2("C:\\Windows\\Readme.htm");
    LoadFromResource("About.Htm");
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
    }
    void CAboutBox::OnBeforeNavigate2Explorer(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flags, VARIANT FAR* TargetFrameName, VARIANT FAR* PostData, VARIANT FAR* Headers, BOOL FAR* Cancel) 
    {
    // TODO: Add your control notification handler code here
    ASSERT(V_VT(URL) == VT_BSTR);
    ASSERT(V_VT(TargetFrameName) == VT_BSTR);
    ASSERT(V_VT(PostData) == (VT_VARIANT | VT_BYREF));
    ASSERT(V_VT(Headers) == VT_BSTR);
    ASSERT(Cancel != NULL); USES_CONVERSION; VARIANT* vtPostedData = V_VARIANTREF(PostData);
    CByteArray array;
    if (V_VT(vtPostedData) & VT_ARRAY)
    {
    // must be a vector of bytes
    ASSERT(vtPostedData->parray->cDims == 1 && vtPostedData->parray->cbElements == 1); vtPostedData->vt |= VT_UI1;
    COleSafeArray safe(vtPostedData); DWORD dwSize = safe.GetOneDimSize();
    LPVOID pVoid;
    safe.AccessData(&pVoid); array.SetSize(dwSize);
    LPBYTE lpByte = array.GetData(); memcpy(lpByte, pVoid, dwSize);
    safe.UnaccessData();
    }
    // make real parameters out of the notification CString strTargetFrameName(V_BSTR(TargetFrameName));
    CString strURL = V_BSTR(URL);
    CString strHeaders = V_BSTR(Headers);
    DWORD nFlags = V_I4(Flags); // notify the user's class OnBeforeNavigate2(strURL, nFlags, strTargetFrameName,array, strHeaders, Cancel);}BOOL CAboutBox::LoadFromResource(LPCTSTR lpszResource)
    {
    HINSTANCE hInstance = AfxGetResourceHandle();
    ASSERT(hInstance != NULL); CString strResourceURL;
    BOOL bRetVal = TRUE;
    LPTSTR lpszModule = new TCHAR[_MAX_PATH]; if (GetModuleFileName(hInstance, lpszModule, _MAX_PATH))
    {
    strResourceURL.Format(_T("res://%s/%s"), lpszModule, lpszResource);
    Navigate(strResourceURL, 0, 0, 0);
    }
    else
    bRetVal = FALSE; delete [] lpszModule;
    return bRetVal;
    }BOOL CAboutBox::LoadFromResource(UINT nRes)
    {
    HINSTANCE hInstance = AfxGetResourceHandle();
    ASSERT(hInstance != NULL); CString strResourceURL;
    BOOL bRetVal = TRUE;
    LPTSTR lpszModule = new TCHAR[_MAX_PATH]; if (GetModuleFileName(hInstance, lpszModule, _MAX_PATH))
    {
    strResourceURL.Format(_T("res://%s/%d"), lpszModule, nRes);
    Navigate(strResourceURL, 0, 0, 0);
    }
    else
    bRetVal = FALSE; delete [] lpszModule;
    return bRetVal;
    }void CAboutBox::Navigate(LPCTSTR lpszURL, DWORD dwFlags /* = 0 */,
    LPCTSTR lpszTargetFrameName /* = NULL */ ,
    LPCTSTR lpszHeaders /* = NULL */, LPVOID lpvPostData /* = NULL */,
    DWORD dwPostDataLen /* = 0 */)
    {
    CString strURL(lpszURL);
    BSTR bstrURL = strURL.AllocSysString(); COleSafeArray vPostData;
    if (lpvPostData != NULL)
    {
    if (dwPostDataLen == 0)
    dwPostDataLen = lstrlen((LPCTSTR) lpvPostData); vPostData.CreateOneDim(VT_UI1, dwPostDataLen, lpvPostData);
    } m_pBrowserApp->Navigate(bstrURL,
    COleVariant((long) dwFlags, VT_I4),
    COleVariant(lpszTargetFrameName, VT_BSTR),
    vPostData,
    COleVariant(lpszHeaders, VT_BSTR));
    }void CAboutBox::Navigate2(LPITEMIDLIST pIDL, DWORD dwFlags /* = 0 */,
    LPCTSTR lpszTargetFrameName /* = NULL */)
    {
    ASSERT(m_pBrowserApp != NULL); COleVariant vPIDL(pIDL);
    COleVariant empty; m_pBrowserApp->Navigate2(vPIDL,
    COleVariant((long) dwFlags, VT_I4),
    COleVariant(lpszTargetFrameName, VT_BSTR),
    empty, empty);
    }void CAboutBox::Navigate2(LPCTSTR lpszURL, DWORD dwFlags /* = 0 */,
    LPCTSTR lpszTargetFrameName /* = NULL */,
    LPCTSTR lpszHeaders /* = NULL */,
    LPVOID lpvPostData /* = NULL */, DWORD dwPostDataLen /* = 0 */)
    {
    ASSERT(m_pBrowserApp != NULL); COleSafeArray vPostData;
    if (lpvPostData != NULL)
    {
    if (dwPostDataLen == 0)
    dwPostDataLen = lstrlen((LPCTSTR) lpvPostData); vPostData.CreateOneDim(VT_UI1, dwPostDataLen, lpvPostData);
    } COleVariant vURL(lpszURL, VT_BSTR);
    COleVariant vHeaders(lpszHeaders, VT_BSTR);
    COleVariant vTargetFrameName(lpszTargetFrameName, VT_BSTR);
    COleVariant vFlags((long) dwFlags, VT_I4); m_pBrowserApp->Navigate2(vURL,
    vFlags, vTargetFrameName, vPostData, vHeaders);
    }void CAboutBox::Navigate2(LPCTSTR lpszURL, DWORD dwFlags,
    CByteArray& baPostData, LPCTSTR lpszTargetFrameName /* = NULL */,
    LPCTSTR lpszHeaders /* = NULL */)
    {
    ASSERT(m_pBrowserApp != NULL); COleVariant vPostData = baPostData;
    COleVariant vURL(lpszURL, VT_BSTR);
    COleVariant vHeaders(lpszHeaders, VT_BSTR);
    COleVariant vTargetFrameName(lpszTargetFrameName, VT_BSTR);
    COleVariant vFlags((long) dwFlags, VT_I4); ASSERT(m_pBrowserApp != NULL); m_pBrowserApp->Navigate2(vURL, vFlags, vTargetFrameName,
    vPostData, vHeaders);
    }void CAboutBox::OnDestroy() 
    {
    m_pBrowserApp->Release(); // RELEASE(m_pBrowserApp);
    CDialog::OnDestroy();
    // TODO: Add your message handler code here

    }void CAboutBox::OnBeforeNavigate2(LPCTSTR lpszURL, DWORD nFlags,
    LPCTSTR lpszTargetFrameName, CByteArray& baPostData,
    LPCTSTR lpszHeaders, BOOL* bCancel)
    {
    // default to continuing
    * bCancel = FALSE; // user will override to handle this notification
    UNREFERENCED_PARAMETER(nFlags);UNREFERENCED_PARAMETER(lpszTargetFrameName);UNREFERENCED_PARAMETER(baPostData);UNREFERENCED_PARAMETER(lpszHeaders);
    const char APP_PROTOCOL[] = "app:";
    int len = _tcslen(APP_PROTOCOL);
    if (_tcsnicmp(lpszURL, APP_PROTOCOL, len)==0) {
    OnAppCmd(lpszURL + len);
    *bCancel = TRUE;//handle user-defined protocal
    }
    }
    void CAboutBox::OnAppCmd(LPCTSTR lpszWhere)
    {
    if (_tcsicmp(lpszWhere,_T("ok"))==0) {
    SendMessage(WM_COMMAND,IDOK);
    }
    }
      

  21.   

    // Machine generated IDispatch wrapper class(es) created by Microsoft Visual C++// NOTE: Do not modify the contents of this file.  If this class is regenerated by
    //  Microsoft Visual C++, your modifications will be overwritten./////////////////////////////////////////////////////////////////////////////
    // CWebBrowser2 wrapper classclass CWebBrowser2 : public CWnd
    ...