Did you have add AFX_MANAGE_STATE(AfxGetStaticModuleState( )); at begin line of main_run(), if not, try to add it then try it.

解决方案 »

  1.   

    _declspec(dllexport) void main_run()  //控制对象接口
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState( ));

    static MainRun mainrun;  //创建控制对象// MainRun* p_mainrun=new MainRun;}修改如此后依然无效。调试时发现是MainRun根本无法接收标准消息,一调用标准消息响应函数,就发生运行时错误。
    _AFXWIN_INLINE BOOL CWnd::EnableScrollBar(int nSBFlags, UINT nArrowFlags)
    { ASSERT(::IsWindow(m_hWnd)); return (BOOL)::EnableScrollBar(m_hWnd, nSBFlags, nArrowFlags); }以上是调试时跳转入的一段。我同时发现mainrun.mhWnd=0
    既窗口句柄的值为0,我是初学者不太清楚为什么会这样。
    是不是窗口句柄值为0就不能接收标准消息,请各位大侠指点
      

  2.   

    与可执行的 MFC 应用程序一样,链接到 MFC 库的非扩展 DLL 需要具有从 CWinApp 派生的类以及该应用程序类的单个对象。但与应用程序的 CWinApp 对象不同的是,DLL 的 CWinApp 对象没有主消息泵。如果 DLL 打开无模式对话框或有自己的主框架窗口,则应用程序的主消息泵必须调用 DLL 所导出的例程,该例程反过来调用 DLL 的应用程序对象的 CWinApp::PreTranslateMessage 成员函数。DLLScreenCap.dll 导出的 FilterDllMsg 函数对此进行了阐释。 msdn2003上的话
      

  3.   

    谢谢楼上的前辈。但具体应该如何实现呢?我之所以设计这样的模式是为了实现自动更新。即dll中的类完成全部的功能,.exe文件只负责加载该dll及更新.更新时由.exe文件完成dll的更新