关于mfc调用dll对话框隐藏
展开全部
一、dll部分
同过vs向导建立一个mfc
dll工程,在工程中创建自己的mfc类,来实现将要展示的界面。新建一个cpp工程,添加头文件#include
"stdafx.h"和界面类的头文件,然后使用下面语句来导出
extern
"c"
__declspec(dllexport)
void
showdlg(void)
{
afx_manage_state(afxgetstaticmodulestate());
cxxdlg
dlg;
dlg.domodal();//实现dll资源切换的?afx_manage_state(afxgetstaticmodulestate());
}
其中cxxdlg是界面类,必须添加代码afx_manage_state(afxgetstaticmodulestate());
作用:用于模块切换时的状态保护,
1.afxgetstaticmodulestate()指向当前模块状态;
2.当前函数调用结束后原模块的状态自动被恢复;
3.用于dll中所调用mfc函数、类、资源时的模块状态切换;
也就是说,并不是每一个dll的输出函数前都要调用它,只有在要输出对话框等用到资源时要调用!
dll中资源是共享的用了这个函数的防止不同的进程修改资源产生错误!
缺省情况下mfc使用主应用程序的资源句柄来载入资源模板,而dll中的资源模板是存在于dll模板中,因此要使用这一语句切换到
二、调用dll
采用如下代码调用dll并显示界面
typedef
void
(*lpfun)(void);
hinstance
hdll;
hdll=loadlibrary(l"xx.dll");
if(null==hdll)
{
messagebox(l"加载失败");
}
lpfun
addfun;
lpfun
pshowdlg=(lpfun)getprocaddress(hdll,"showdlg");
if(pshowdlg==null)
{
messagebox(l"加载失败");
}
pshowdlg();
closehandle(hdll);
其中xx.dll为dll的名称
同过vs向导建立一个mfc
dll工程,在工程中创建自己的mfc类,来实现将要展示的界面。新建一个cpp工程,添加头文件#include
"stdafx.h"和界面类的头文件,然后使用下面语句来导出
extern
"c"
__declspec(dllexport)
void
showdlg(void)
{
afx_manage_state(afxgetstaticmodulestate());
cxxdlg
dlg;
dlg.domodal();//实现dll资源切换的?afx_manage_state(afxgetstaticmodulestate());
}
其中cxxdlg是界面类,必须添加代码afx_manage_state(afxgetstaticmodulestate());
作用:用于模块切换时的状态保护,
1.afxgetstaticmodulestate()指向当前模块状态;
2.当前函数调用结束后原模块的状态自动被恢复;
3.用于dll中所调用mfc函数、类、资源时的模块状态切换;
也就是说,并不是每一个dll的输出函数前都要调用它,只有在要输出对话框等用到资源时要调用!
dll中资源是共享的用了这个函数的防止不同的进程修改资源产生错误!
缺省情况下mfc使用主应用程序的资源句柄来载入资源模板,而dll中的资源模板是存在于dll模板中,因此要使用这一语句切换到
二、调用dll
采用如下代码调用dll并显示界面
typedef
void
(*lpfun)(void);
hinstance
hdll;
hdll=loadlibrary(l"xx.dll");
if(null==hdll)
{
messagebox(l"加载失败");
}
lpfun
addfun;
lpfun
pshowdlg=(lpfun)getprocaddress(hdll,"showdlg");
if(pshowdlg==null)
{
messagebox(l"加载失败");
}
pshowdlg();
closehandle(hdll);
其中xx.dll为dll的名称
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询