我先大概的描述下
我的程序中有
mfc dll1 添加了一个对话框资源ID:dlg1,对话框上有一个webbrowser控件 添加该控件变量myIE1,导出函数nav1
mfc dll2 添加了一个对话框资源ID:dlg2,对话框上有一个webbrowser控件 添加该控件变量myIE2, 导出函数nav2
mfc 对话框 上面有一个按钮ID:btn1
我做了几个测试
一:单击btn1,调用dll1中的导出函数nav1,窗体显示,并导航到指定网页中,成功!
二:单击btn1, 调用dll2中的导出函数nav2,窗体显示,并导航到指定网页中,成功!
三:单击btn1, 调用dll1中的导出函数nav1,窗体显示导航,调用dll2的导出函数nav2,窗体显示导航
关键是第三个测试
我在btn1的click中开了两个线程 
afxbeginthread(thread1,this);
afxbeginthread(thread2,this);
thread1和thread2主要是为了调用两个不同的dll中的导出函数

thread1----》nav1
thread2----》nav2
再次强调每个dll的对话框资源中有一个webbrowser控件可是问题就来了,当运行的时候就报错   if (pSite == NULL)
  {
   TRACE(traceAppMsg, 0, "Error: no data exchange control with ID 0x%04X.\n", nIDC);///这个地方报错我看了下我的资源文件是我的dll1中的那个对话框中的那个webbrowser控件的id的值
   ASSERT(FALSE);
   AfxThrowNotSupportedException();
  }
其实就是简单的单击一个按钮让然后开两个线程然后各个线程处理各自的dll对话框
按照理论来说这个应该没有问题的啊
我百度,google,bing都没有找到合适的答案才跑来提问的
到底是什么原因呢,难道webbrowser控件只能在一个进程(强调)中初始化一次
搞不明错误的原因,请高人指点
谢谢
有描述不清楚的地方请指出,谢谢了

解决方案 »

  1.   

    一:单击btn1,调用dll1中的导出函数nav1,窗体显示,并导航到指定网页中,成功! 
    二:单击btn1, 调用dll2中的导出函数nav2,窗体显示,并导航到指定网页中,成功! 
    ===============================================================================这两个测试,你有没有用到线程来运行nav1或nav2?
      

  2.   

    恩,是的在各个dll中的导出函数中我开了一个线程来处理web控件导航的如果从整体上看的话
    也可以说是             线程一   又开一个线程
    开了两个线程  
                 线程二   又开一个线程线程中开线程
    这样的不知道描述的准确不
    谢谢
      

  3.   

    这么说,你是一个线程加载一个带有WebBrowser控件的DLL了?
    那么这两个WebBrowser控件用的资源是同一个吗?
      

  4.   

    应该不是同一个吧我是每个dll都有一个对话框资源上面有web控件
    而且我也看了不同的dll中的对话框中的资源
    他们的id是不一样的
    在我的这个程序中第一个对话框中的web控件的id是3000
    第二个对话框中的web控件的id是4000没人来吗
    谢谢了
      

  5.   

    MFC封装的DLL如果使用了资源,请在函数开始加入:AFX_MANAGE_STATE(AfxGetStaticModuleState());如果DLL使用的对话框上面又引用了其它COM组件,请在函数开始加入下面三句:
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CoInitialize(NULL);
    AfxEnableControlContainer();
      

  6.   

    哇哇哇哇哇哇哇哇哇哇
    可以了,可以了
    太谢谢你了第一个多谢您的提醒,原来我以前的新建的一个dll忘记初始化了,也就是dll2
    第二我以前用的是
    exehinst=AfxGetResourceHandle();
    AfxSetResourceHandle(theApp.m_hInstance);
    也是你提醒我,我还是换回以前的
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    结果就出来了
    非常感谢
    结贴给分
    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 
      

  7.   

    楼主你好,我也想在mfc 扩展dll中使用webbrowser控件,我的主要目的是使用mshtml解析网页中的所有链接,dll的导出函数getLinks,功能就是获取页面上的所有链接,此函数当中使用了webbrowser控件的navigate进行导航,其中webbrowser控件的实现类为CWebBrowser2继承自CWnd,问题我在getLinks函数中如何实例化类CWebBrowser2, 当我使用CWebBrowser2* browser=new CWebBrowser2()作为实例化时,然后调用browser的navigate函数进行后续操作,编译可以通过,但当我在java程序中调用getLinks时,会弹出,我初步调试认为类CWebBrowser2实例化时出问题,请问如何解决?谢谢!
      

  8.   

    不好意思啊
    我现在才看见你的帖子你可以加QQ:416532793
    还有你贴的图片看不到
    java我也不会
    vc的话可以交流下
    好吗?