在DLL中使用资源
2009-10-06 20:29:53 来源:WEB开发网1、静态链接到MFC的DLL
静态链接到MFC的规则DLL与MFC库静态链接,则此时MFC库不能共享,所以MFC总是使用它所链接的DLL的模块状态。这样也就不存在管理模块状态的问题。但使用这种方法的缺点是DLL程序将会变大,而且会在程序中留下重复代码。下面给出的例子验证了这一点。本例可以按照以下步骤来完成:
1)在VC菜单中File->New新建一个命名为DLLStatic的MFC AppWizard的工程,下一步选择Regular DLL with MFC statically linked。
2)在工程中添加一个对话框资源,其ID为:IDD_ABOUTBOX。并在resource.h之中将IDD_ABOUTBOX 的数值改为100。
3)在DLLStatic.cpp中定义如下函数:
void ShowDlg()
{
CDialog dlg(IDD_ABOUTBOX);
dlg.DoModal();
}
4)在DLLStatic.def文件中的EXPORTS语句中添加一行:ShowDlg,以导出ShowDlg函数。
5)编译生成DLLStatic.dll和DLLStatic.lib。
继续使用上一节中的Use工程,将前面生成的DLLStatic.dll和DLLStatic.lib两个文件复制到工程的Debug目录内,并将
extern "C" __declspec(dllexport) void ShowDlg();
#pragma comment(lib,"debug/UseDlg")
这两行改为:
void ShowDlg();
#pragma comment(lib,"debug/DLLStatic")
编译并运行Use.exe。点击按钮,可以看到DLLStatic中的模态对话框弹出。
本例中,可以注意到DLL中所定义的About对话框资源与EXE中所定义的About对话框资源ID完全相同,但是当我们点击Use.exe上面的按钮时,弹出的是DLL中的模态对话框。说明,当使用静态链接到MFC的规则DLL时,不存在管理模块状态的问题。
2、动态链接到MFC的DLL
在讨论关于动态链接到MFC的DLL的模块状态问题之前,先来看一个例子。本例可以通过如下步骤来完成:
1)在VC菜单中File->New新建一个命名为DLLShared的MFC AppWizard的工程,下一步选择Regular DLL using shared MFC DLL。
2)在工程中添加一个对话框资源,其ID为:IDD_ABOUTBOX。并在resource.h之中将IDD_ABOUTBOX 的数值改为100。
3)在DLLShared.cpp中定义如下函数:
void ShowDlg()
{
CDialog dlg(IDD_ABOUTBOX);
dlg.DoModal();
}
4)在DLLShared.def文件中的EXPORTS语句中添加一行:ShowDlg,以导出ShowDlg函数。
5)编译生成DLLShared.dll和DLLShared.lib。
继续使用上面的Use工程,将前面生成的DLLShared.dll和DLLShared.lib两个文件复制到工程的Debug目录内,并将
extern "C" __declspec(dllexport) void ShowDlg();
#pragma comment(lib,"debug/DLLStatic")
这两行改为:
void ShowDlg();
#pragma comment(lib,"debug/DLLShared")
更多精彩
赞助商链接