怎样在动态库中创建一个对话框,并且能在外部程序的调中显示出来我的程序如下不行:
extern "C" __declspec(dllexport)
BOOL DisplayDlg()
{
CtestDlg dlg;
dlg.DoModal();
return TRUE;
}无法成功

解决方案 »

  1.   

    dll這邊應該寫的沒問題,
    調用的應用程序代碼呢?
      

  2.   

    调用代码为:
    typedef BOOL(*pf)(); HMODULE hm=::LoadLibrary("TestDll.dll");
    if(hm)
    {
    pf fu=(pf)::GetProcAddress(hm,"DisplayDlg");

    (*fu)();
    }
      

  3.   

    在.H文件里面
    extern "C"
    {
    __declspec(dllexport) BOOL DisplayDlg();
    }
    在.CPP文件里面
    __declspec(dllexport)BOOL DisplayDlg()
    {
           CtestDlg dlg;
    dlg.DoModal();
    return TRUE;}
    就行了^_^
    别忘了给分呀
      

  4.   

    这个问题很深奥,涉及到Dll库的类型和调用程序的类型,如果库和Exe都是基于mfc的,应该可以这样调用,就像在exe中直接调用dlg.DoModal函数一样,如果exe是用sdk编写的就不能这样写,因为MFC中的模态对话窗并不是真正的模态对话窗(真正的模态对话窗用API-DialogBox产生),而DoModal实际上调用的是CreateDialog的相关函数,实际上是一个非模态的对话创,由MFC体系产生的窗口钩子将其模拟成模态对话窗,因此基于MFC的DLL中的DoModal产生的对话窗不能脱离MFC体系结构,也就是说EXE文件也得是MFC编写的。
    另外如果你的DLL不是基于MFC的,那么更不能这样用了。
    不知道你的具体情况,请说明。
      

  5.   

    同意樓上的,我用MFC現寫了一個dll,跟你那個一樣的,
    能用啊!從你給的代碼里看不出什麽毛病了,sorry,
    不過你好像忘了FreeLibrary() :)
      

  6.   

    两个程序(DLL和exe)都是基于MFC的操作平台是win2000我也纳闷就是不能成功
      

  7.   

    在Dll中创建对话框并调用:http://www.vckbase.com/code/listcode.asp?mclsid=13&sclsid=1303