正在阅读:VC++动态链接库(DLL)编程深入浅出(三)VC++动态链接库(DLL)编程深入浅出(三)

2005-09-23 09:57 出处:PConline 作者:宋宝华 责任编辑:moningfeng

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

  资源模块的切换除了可以由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进行详细分析和实例讲解,欢迎您继续关注本系列连载。
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品