大家好,我现在想把一个登陆对话框封入一个DLL中,但是遇到一个问题,希望大家给点注意,谢谢!在我的想法里面是输入用户名和密码,然后点击登陆按扭,验证之后要弹出一个对话框,弹出的对话框不在DLL中,是在调用DLL的新的工程中,那么DLL中怎么处理登陆这个按扭的消息响应函数?怎么留接口?是用回掉函数吗?具体怎么实现,拜谢大家!最好能给出关键部分的代码,急用!!!!!!!!!!!

解决方案 »

  1.   

    这个对话框你想怎么调用呢?
    不就是通过类声明对象然后DoModule么
    那把所有东西都写在dll里
    然后通过DoModule的返回值判断不就行了么
    怎么又是回调函数又是接口的
      

  2.   


    // 简单写一下
    class ILoginNotifier
    {
    public:
        virtual ~ILoginNotifier() {}
        // 回调接口可以修改,根据用户名和密码的校验,当然还可以根据回调结果判断登录对话框是否可以关闭什么的
        virtual void OnNotifyLoginResult(BOOL bLogin, const CString& strUserName, const CString& strPassword) = 0;
    };// dll登录类
    class CLoginDialog : public CDialog
    {
    public:
    CLoginDialog(CWnd* pParent = NULL)
    : CDialog(IDD, pParent)
    , m_pNotifier(NULL)
    , m_strUsername(_T(""))
    , m_strPassword(_T(""))
    { }
    CLoginDialog(ILoginNotifier* pNotifier, CWnd* pParent = NULL)
    : CDialog(IDD, pParent)
    , m_pNotifier(pNotifier)
    , m_strUsername(_T(""))
    , m_strPassword(_T(""))
    { } virtual OnOK()
    {
    ASSERT(m_pNotifier && !m_strUsername.IsEmpty() && !m_strPassword.IsEmpty());
    if ( m_pNotifier )
    {
    m_pNotifier->OnNotifyLoginResult(TRUE, m_strUsername, m_strPassword);
    }
    CDialog::OnOK();
    } virtual OnCancel()
    {
    ASSERT(m_pNotifier);
    if ( m_pNotifier )
    {
    m_pNotifier->OnNotifyLoginResult(FALSE, CString(), CString());
    }
    CDialog::OnCancel();
    }
    enum { IDD = IDD_LOGINDIALOG };

    protected:
    ILoginNotifier* m_pNotifier;
    CString m_strUsername;
    CString m_strPassword;
    };// dll导出函数
    void ShowLoginDlg(ILoginNotifier* pNotifier)
    {
    CLoginDialog _loginDlg(pNotifier);
    _loginDlg.DoModal();
    }
      

  3.   

    If your dll is not writen by C++. you can use call back function.
    Otherwise you can export your Dialog Class.
      

  4.   

    3楼的想法是正确的。自己创建一个对话框,创建上面的控件,让用户填写用户名和密码。输出一个函数,返回真或假,因为对话框的DoModle,函数会阻塞住,根据用户的输入情况,返回真或假,控制你的程序流程。