我首先建立了一个以对话框为基础的应用程序,我需要根据要求调用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对话框,并且两个对话框之间可以通讯.
如果我这种方法也可以成功的话请问,我缺少了什么东西,我该注意什么?
如下:
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对话框,并且两个对话框之间可以通讯.
如果我这种方法也可以成功的话请问,我缺少了什么东西,我该注意什么?
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CDllDlg *dlg = new CDllDlg;
dlg->Create(CDllDlg::IDD); ////改一下这里
dlg->ShowWindow(SW_SHOW);
}
我已经没有什么相关代码了,只不过是随手建立个工程,都是MFC代码,我差不多把我所有手动的代码都贴了,呵呵
谢谢konista,等我试试。
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CDllDlg *dlg = new CDllDlg;
dlg->Create(IDD_DIALOG,NULL);
dlg->ShowWindow(SW_SHOW);
}
已经试过,不行的
我的做法是这样的,
extern "C" __declspec( dllexport ) void MyDllTest()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CDllDlg dlg;
dlg.DoModal();
}
做成模式对话框。
然后在主程序中建立一个线程,在线程中动态调用DLL,这时候就可以同时显示两个窗口了。
但我是个菜鸟,不知道这样的两个窗口如何通讯 呵呵,大家继续指教。
能否把你试验的工程发给我对比? 我的文件实在也没什么东西了。
[email protected]
在程序中,如果没有DLL,这样作很简单,但有了DLL,似乎麻烦很多
您能否发给我个例子给我,我的油箱 [email protected], 最好再示范一下怎么通讯 呵呵,谢谢了
dlg->Create(IDD_DLG);
dlg->ShowWindow(SW_SHOW);
===========================
CDllDlg *dlg = new CDllDlg;
dlg->Create(IDD_DLG,this);
dlg->ShowWindow(SW_SHOW);
我写了一份运行正确,不知道你要不要
.cn
能否把运行正确的发给我?
另外hanbig konista说的对,这是调用的问题, 不要嫌分数少, 谢谢