AfxGetResourceHandle用于获取当前资源模块句柄,而AfxSetResourceHandle则用于设置程序目前要使用的资源模块句柄。
2013-04-18 19:01
726 查看
VC++动态链接库(DLL)编程深入浅出(三)
2005-09-23 09:57 出处:PConline 作者:宋宝华 责任编辑:moningfeng 在本页浏览全文
AFX_MANAGE_STATE是一个宏,其原型为: AFX_MANAGE_STATE( AFX_MODULE_STATE* pModuleState ) 该宏用于将pModuleState设置为当前的有效模块状态。当离开该宏的作用域时(也就离开了pModuleState所指向栈上对象的作用域),先前的模块状态将由AFX_MODULE_STATE的析构函数恢复。 方法二 在DLL接口函数中使用: AfxGetResourceHandle(); AfxSetResourceHandle(HINSTANCE xxx); AfxGetResourceHandle用于获取当前资源模块句柄,而AfxSetResourceHandle则用于设置程序目前要使用的资源模块句柄。 我们将DLL中的接口函数ShowDlg改为: void ShowDlg(void) { //方法2的状态变更 HINSTANCE save_hInstance = AfxGetResourceHandle(); AfxSetResourceHandle(theApp.m_hInstance); CDialog dlg(IDD_DLL_DIALOG);//打开ID为2000的对话框 dlg.DoModal(); //方法2的状态还原 AfxSetResourceHandle(save_hInstance); } 通过AfxGetResourceHandle和AfxSetResourceHandle的合理变更,我们能够灵活地设置程序的资源模块句柄,而方法一则只能在DLL接口函数退出的时候才会恢复模块句柄。方法二则不同,如果将ShowDlg改为: extern CSharedDllApp theApp; //需要声明theApp外部全局变量 void ShowDlg(void) { //方法2的状态变更 HINSTANCE save_hInstance = AfxGetResourceHandle(); AfxSetResourceHandle(theApp.m_hInstance); CDialog dlg(IDD_DLL_DIALOG);//打开ID为2000的对话框 dlg.DoModal(); //方法2的状态还原 AfxSetResourceHandle(save_hInstance); //使用方法2后在此处再进行操作针对的将是应用程序的资源 CDialog dlg1(IDD_DLL_DIALOG); //打开ID为2000的对话框 dlg1.DoModal(); } 在应用程序主对话框的“调用DLL”按钮上点击,将看到两个对话框,相继为DLL中的对话框(图13)和EXE中的对话框(图14)。 |
相关文章推荐
- 获取当前模块句柄GetModuleHandle
- 根据进程结合GetModuleHandle获取当前主模块句柄
- 根据进程结合GetModuleHandle获取当前主模块的句柄
- Java 使用getClass().getResourceAsStream()方法获取资源
- WinAPI: GetModuleHandle - 获取一个模块(exe 或 dll)的句柄
- cocos2d-x获取程序当前内存使用量 GetProcessMemoryInfo 函数
- GetModuleHandle(NULL)获取当前DLL模块基址?
- [WinAPI] API 12 [获取程序所在的目录、程序模块路径,获取和设置当前目录]
- AfxGetInstanceHandle、AfxSetResourceHandle
- Java 使用getClass().getResourceAsStream()方法获取资源
- GetModuleHandle(NULL)获取当前DLL模块基址?
- 使用GetModuleFileName函数获取当前程序所在目录
- AfxSetResourceHandle AfxFindResourceHandle AfxGetResourceHandle
- WinAPI: GetModuleHandle - 获取一个模块(exe 或 dll)的句柄
- Java中获取classpath路径下的资源文件【ClassLoader.getSystemResource("")获取当前ClassPath的绝对URI路径,还可以以流的形式获取文件】
- 使用GetModuleFileName函数获取当前程序所在目录
- 使用Context.getResource().getIdentifier()获取资源文件ID
- 1.GetModuleHandle 获取一个特定的应用程序或动态链接库的模块句柄
- [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果
- SDK获取程序所在的目录,程序模块路径,获取和设置当前目录