WEB开发网
开发学院软件开发VC VC++动态链接库(DLL)编程深入浅出(三) 阅读

VC++动态链接库(DLL)编程深入浅出(三)

 2007-03-15 21:47:45 来源:WEB开发网   
核心提示: 方法三 由应用程序自身切换资源模块的切换除了可以由DLL接口函数完成以外,由应用程序自身也能完成(下载本工程附件),VC++动态链接库(DLL)编程深入浅出(三)(10),现在我们把DLL中的接口函数改为最简单的:void ShowDlg(void){CDialog dlg(IDD_DLL

方法三 由应用程序自身切换

资源模块的切换除了可以由DLL接口函数完成以外,由应用程序自身也能完成(下载本工程附件)。

现在我们把DLL中的接口函数改为最简单的:

void ShowDlg(void)
{
CDialog dlg(IDD_DLL_DIALOG); //打开ID为2000的对话框
dlg.DoModal();
}

而将应用程序的OnCalldllButton函数改为:

void CSharedDllCallDlg::OnCalldllButton()
{
//方法3:由应用程序本身进行状态切换
//获取EXE模块句柄
HINSTANCE exe_hInstance = GetModuleHandle(NULL);
//或者HINSTANCE exe_hInstance = AfxGetResourceHandle();
//获取DLL模块句柄
HINSTANCE dll_hInstance = GetModuleHandle("SharedDll.dll");
AfxSetResourceHandle(dll_hInstance); //切换状态
ShowDlg(); //此时显示的是DLL的对话框
AfxSetResourceHandle(exe_hInstance); //恢复状态
//资源模块恢复后再调用ShowDlg
ShowDlg(); //此时显示的是EXE的对话框
}

方法三中的Win32函数GetModuleHandle可以根据DLL的文件名获取DLL的模块句柄。如果需要得到EXE模块的句柄,则应调用带有Null参数的GetModuleHandle。

方法三与方法二的不同在于方法三是在应用程序中利用AfxGetResourceHandle和AfxSetResourceHandle进行资源模块句柄切换的。同样地,在应用程序主对话框的“调用DLL”按钮上点击,也将看到两个对话框,相继为DLL中的对话框(图13)和EXE中的对话框(图14)。

在下一节我们将对MFC扩展DLL进行详细分析和实例讲解,欢迎您继续关注本系列连载。

上一页  5 6 7 8 9 10 

Tags:VC 动态 链接

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接