我在一个DLL中使用了一个WebBrowser控件,同时我在小程序中调用这个DLL的,但是里面的WebBrowser控件,就是不能工作。
步骤如下:
首先,我建立一个DLL。
在这个DLL中,我有一个CDialog, 
在这个Dialog中,我加载了一个WebBrowser控件,和一个按钮控件
CWebBrowser2 m_IE;
CButton Button1;在这个按钮点击事件中,我调用这个WebBrowser控件,打开一个网页。
void CMainDlg::OnButton1()
{
    ::COleVariant tmp;
    ::COleVariant tmpstrUrl("http://www.google.com");
    this->m_IE.Navigate2(strUrl,tmp,tmp,tmp,tmp);
}然后我再一个小应用程序中,调用这个DLL
void CTestDlgDlg::OnButton1() 
{
m_hLibrary = ::AfxLoadLibrary("testdll.dll");
}我打开了这个DLL中的Dialog。
但是,我点击按钮打开网页的时候,却一直没有反应。有大侠能帮我解决这个问题吗?
我再小应用程序中,用和在DLL中同样的方法,调用WebBrowser控件,是正确的。这让我很迷茫。
请各位大侠帮忙啊!不管是,帮忙解决问题,还是帮忙顶帖子,都万分感激!(一定给分!)

解决方案 »

  1.   

    AFX_MANAGE_STATE(AfxGetStaticState())

    CoInitialize都用了吗?
      

  2.   

    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    AfxEnableControlContainer() ;
    ::AfxOleInit();
    CoInitialize(NULL) ;
    这些在dll中全加。还是没有解决问题。
      

  3.   

    含Browser的dialog是怎样被调用起来的?
    LoadLibrary时就直接显示了这个Dialog?使用的DoModal方法?
    可能需要进入消息循环过程,让WebBrowsser控件可以处理后续动作。
      

  4.   

    LoadLibrary时就直接显示了这个Dialog。BOOL CTestDllApp::InitInstance()
    {
    if (!AfxSocketInit())
    {
    AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
    return FALSE;

    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    AfxEnableControlContainer() ;
           ::AfxOleInit();
            CoInitialize(NULL) ;
    COleObjectFactory::RegisterAll();
    CMainDlg dlg ;
    dlg.DoModal() ;
    return TRUE;
    }
      

  5.   

    这是我的测试工程这么写的。 不过不管什么方式都一样。比如dll中的窗口是个框架窗口,并且是CHtmlView 也是不行的。
    大家可以试试看。 就是这么奇怪。
      

  6.   

    你可以用CHtmlView,但是重载它的Create的函数,将其中用到的IWebBrowser2接口自已创建.
    我试过了,是可以的
      

  7.   

    建议不要在InitInstance里直接显示该对话框而是export出一个函数来,在函数里调用这个对话框我觉得还是消息循环不能被处理的原因做在DLL中肯定没有问题的
      

  8.   

    在www.vckbase.com上有源代码,你可以参考
      

  9.   

    Ah(蓝过天) 兄:
    你如何做的? 能不能发个例子过来. [email protected]