要设计一个DLL引出函数,将对话框的句柄传给应用程序,应用程序直接向这个窗口发消息就行了

解决方案 »

  1.   

    APP当然无法接到消息,消息是发给窗口的,你应该在DLL中定义一个窗口,在窗口中处理消息,另外,在DLL中处理资源(例如你的对话框),要加如下一句:
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    不然得不到资源的handle
      

  2.   

    在动态库中假定为Comm.dll设置接口函数如下:
    extern "C" _declspec(dllexport)  LRESULT SendUMessage(UINT uMsg,WPARAM wParam,LPARAM lParam)
    { if(IsWindow(g_Wnd.m_hWnd))
    return g_Wnd.SendMessage(uMsg,wParam,lParam);
    else 
    return 0;
    }
    在主程序中:
    同样写一个函数:
    在CCompile的头文件定义:typedef  LRESULT (FUNC_SENDUMESSAGE)(UINT ,WPARAM ,LPARAM );
    FUNC_SENDUMESSAGE* m_pFuncSendUMessage;
    然后初始化:
    void CCompile::Init()
    {
    VERIFY(m_hInstance=::LoadLibrary("Comm.dll"));
    VERIFY(m_pFuncSendUMessage=(FUNC_POSTUMESSAGE*) ::GetProcAddress(m_hInstance,"SendUMessage"));
    }
    LRESULT CCompile::SendUMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    if(m_pFuncSendUMessage!=NULL)
    return (*m_pFuncSendUMessage)(uMsg,wParam,lParam);
    else
    return 0;
    }
    这样我们在主程序中发消息就能被动态库所响应了。例如我们在主程序中SendUMessage(WM_CHAR,0,0);在动态库就会相应的激发动作