| 发表于:2008-01-11 00:57:28 楼主 |
在一mfc扩展dll中生成一个对话框资源,id为idd_dialog1,对应的对话框类为cdlldlg,并在其中添加多个不同的资源,定义了多个接口函数,并在cdlldlg前加afx_exe_class导出该类。在一个.exe中调用该对话框,生成一个模态对话框。 void cmydlg::func() { cdlldlg dlg; dlg.domodal(); } 运行发现有错误,提示说idd_dialog1未定义。根据网上介绍的一种方法,在dll中注销掉enum { idd = idd_dialog1 };这一行,并将对话框构造函数改为 cdlldlg::cdlldlg(cwnd* pparent /*=null*/): cdialog(idd_dialog1, pparent) 运行显示正确。我的问题是 1.这种方法是否可靠,还有没有别的方法? 2.从扩展dll中导出对话框是不是就不需要切换资源状态了?因为我没切换也没发现有什么问题。 当我在.exe中将dll中的对话框导出,并生成非模态对话框时,代码如下 void cmydlg::func() { cdlldlg*dlg=null; dlg=new cdlldlg; dlg-> create(idd_dialog1,this); //此行出错 dlg-> showwindow(sw_show); } 运行保错,提示说idd_dialog1未定义,然后我修改代码 void cmydlg::func() { hinstance hexeins=afxgetinstancehandle(); hinstance hdllins=getmodulehandle("dllex.dll"); afxsetresourcehandle(hdllins); cdlldlg*dlg=null; dlg=new cdlldlg; dlg-> create(idd_dialog1,this); dlg-> showwindow(sw_show); afxsetresourcehandle(hexeins); } 可还是不行,我已经切换资源了呀。我有些糊涂了,请高手指教,从扩展dll中导出非模态对话框时该怎么操作才不会出错,就以我这个例子修改就成。多谢。 |
|
|
|
|