龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC++动态链接库(DLL)编程深入浅出(三)[组图](12)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
方法三 由应用程序自身切换 资源模块的切换除了可以由DLL接口函数完成以外,由应用程序自身也能完成(下载本工程附件)。 现在我们把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)。

精彩图集

赞助商链接