使用VC写了一个包含对话框的dll,调用时用的以下代码
m_DataDllHandler = LoadLibrary("GlobalInfo.dll");

if (m_DataDllHandler == NULL)
{
MessageBox("加载GlobalInfo.dll失败");
return;
}

typedef CDialog* (*SHOWDIALOG)(const CString& strLimit, CWnd* pParentWnd, CRect rcWnd);
SHOWDIALOG ShowDialog;

CString strLimit = "1111111111";
CString strMSG;

ShowDialog = (SHOWDIALOG)GetProcAddress(m_DataDllHandler, "DepartmentDlgView");
if (ShowDialog == NULL)
{
::FreeLibrary(m_DataDllHandler);
m_DataDllHandler = NULL;
strMSG.Format("加载函数[%s]失败!", "DepartmentDlgView");
AfxMessageBox(strMSG);
return ;
}

m_pDlg = ShowDialog(strLimit, m_pWsEditView , rect);对话框能够正常显示出来,但是里面的Edit,comboBox都不响应任何消息了,不知道为什么?而且最奇怪的是我新建一个工程,也是用相同的代码调用,就一切正常。我现在怀疑是dll中的ID和主程序中的ID有冲突,不知道是不是这个原因,怎么解决,那位高手碰到过帮帮忙!

解决方案 »

  1.   

    DepartmentDlgView函数中第一句加上
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
      

  2.   

    那把dll中的控件ID和主程序中使用控件的ID改成一样啊
      

  3.   

    对话框能够正常显示出来,但是里面的Edit,comboBox都不响应任何消息了,不知道为什么?而且最奇怪的是我新建一个工程,也是用相同的代码调用,就一切正常。我现在怀疑是dll中的ID和主程序中的ID有冲突,不知道是不是这个原因,怎么解决?有可能,只有你自己检查了。其他人无法代替你完成。
      

  4.   

    对了,还有一个现象是,debug下是好的,release下才有这个问题
      

  5.   

    在Dll中试着建立自己的消息循环试试。
      

  6.   

    你把SHOWDIALOG ShowDialog;定义成成员变量试试