关于DLL中显示非模式对话框问题

leky2000 2004-10-30 10:36:06
我首先建立了一个以对话框为基础的应用程序,我需要根据要求调用DLL中的对话框,但我希望在DLL中的对话框为非模式对话框,然后动态调用DLL
如下:
extern "C" __declspec( dllexport ) void MyDllTest()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CDllDlg *dlg = new CDllDlg;
dlg->Create(IDD_DLG);
dlg->ShowWindow(SW_SHOW);
}

然后动态调用DLL,程序运行出错
后来我在主程序中添加一个CWinThread线程类然后在线程中启动DLL,而这时候我在DLL中如下作:
BEGIN_MESSAGE_MAP(CMchdllApp, CWinApp)
END_MESSAGE_MAP()


// CMchdllApp 构造

CMchdllApp::CMchdllApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}


// 唯一的一个 CMchdllApp 对象

CMchdllApp theApp;


// CMchdllApp 初始化

BOOL CMchdllApp::InitInstance()
{
CWinApp::InitInstance();
CDllDlg dlg;
dlg.DoModal();

return TRUE;
}

extern "C" __declspec( dllexport ) HWND MyDllTest()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return(theApp.m_pMainWnd->GetSafeHwnd());

}
这样作,相当于另外启动一个程序吧?但是两个对话框切换时仍然有些不正常的现象
请问高手们,有没有更好的方法在DLL中显示对话框,而且可以同时操作主程序对话框和DLL对话框,并且两个对话框之间可以通讯.
如果我这种方法也可以成功的话请问,我缺少了什么东西,我该注意什么?
...全文
403 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
leky2000 2004-11-05
  • 打赏
  • 举报
回复
感谢各位的帮助,我跟阿郎给我的文件对比一下,发现一个愚蠢的错误,就是随后用了freelibry
另外hanbig konista说的对,这是调用的问题, 不要嫌分数少, 谢谢
leky2000 2004-11-05
  • 打赏
  • 举报
回复
好的,谢谢阿郎
linxy2002 2004-11-05
  • 打赏
  • 举报
回复
已经发了,如果还有什么问题,你发邮件问我好了
leky2000 2004-11-04
  • 打赏
  • 举报
回复
linxy2002(阿郎)
能否把运行正确的发给我?
leky2000 2004-11-04
  • 打赏
  • 举报
回复
hanbig:
在程序中,如果没有DLL,这样作很简单,但有了DLL,似乎麻烦很多
您能否发给我个例子给我,我的油箱 leky2000@163.com, 最好再示范一下怎么通讯 呵呵,谢谢了
linxy2002 2004-11-04
  • 打赏
  • 举报
回复
你的动态输出DLL是没有写错的,应该是你调用的时候出错了,
我写了一份运行正确,不知道你要不要
我的邮箱:
linxy_2002@yahoo.com.cn
leky2000 2004-11-04
  • 打赏
  • 举报
回复
上面这位仁兄,这样好像不行
kugou123 2004-11-04
  • 打赏
  • 举报
回复
CDllDlg *dlg = new CDllDlg;
dlg->Create(IDD_DLG);
dlg->ShowWindow(SW_SHOW);
===========================
CDllDlg *dlg = new CDllDlg;
dlg->Create(IDD_DLG,this);
dlg->ShowWindow(SW_SHOW);
realmiss 2004-11-04
  • 打赏
  • 举报
回复
我估计有可能是资源句柄出了问题,就是说这个Create函数无法找到你的对话框资源模板
leky2000 2004-11-03
  • 打赏
  • 举报
回复
多谢各位热心回答,期待详细的有效的方法 多谢!
hanbig 2004-11-03
  • 打赏
  • 举报
回复
程序中经常会使用这种方式创建对话框,我们都有有效的方法,只是不知道你怎么帮你
konista 2004-11-02
  • 打赏
  • 举报
回复
大概原因不在这里,我做过试验,你原来的方法也可以,找找别的地方吧
leky2000 2004-11-02
  • 打赏
  • 举报
回复
问题仍然无法解决,但我感谢各位的热心帮助。
我的做法是这样的,
extern "C" __declspec( dllexport ) void MyDllTest()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CDllDlg dlg;
dlg.DoModal();
}
做成模式对话框。
然后在主程序中建立一个线程,在线程中动态调用DLL,这时候就可以同时显示两个窗口了。
但我是个菜鸟,不知道这样的两个窗口如何通讯 呵呵,大家继续指教。
leky2000 2004-11-02
  • 打赏
  • 举报
回复
mynamelj(风之羽翼)
已经试过,不行的
ttzzgg_80713_ 2004-11-02
  • 打赏
  • 举报
回复
static link mfc
ProgramInHeart 2004-11-02
  • 打赏
  • 举报
回复
okie
xinsun 2004-11-02
  • 打赏
  • 举报
回复
我也在DLL中SHOW出非模式窗口,但并不是在引出函数中作到的。只是在引出函数中安装一个HOOK,在第一次响应HOOK的时候new窗体,然后create,在以后响应HOOK的时候显示出来。窗体指针是全局变量
hanbig 2004-11-02
  • 打赏
  • 举报
回复
调用dll的代码?
leky2000 2004-11-02
  • 打赏
  • 举报
回复
konista(M):
能否把你试验的工程发给我对比? 我的文件实在也没什么东西了。
leky2000@163.com
leky2000 2004-11-01
  • 打赏
  • 举报
回复
是的,我也知道函数看不出问题,但问题究竟出在哪里?
加载更多回复(14)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧