在上述例子的第三步的showdlg函数的第一条语句前加上如下语句(要确保该语句在函数实现的第一行):
afx_manage_state(afxgetstaticmodulestate());
之后重新编译生成dllshared.dll和dllshared.lib,并将这两个文件重新拷贝到use工程的debug目录内。这次编译生成use.exe并运行,点击按钮,可以看到弹出的时我们在dll中所加入的那个对话框,而不再是use.exe的关于对话框了。
通过上面的讲解,相信你已经知道该语句的作用了。在函数showdlg的第一行加上这么一句后,每次调用dll的应用程序使用该函数的时候,mfc库都会自动切换当前模块状态,这样就保证了资源读取的正确性。
afx_manage_state(afxgetstaticmodulestate());是自动切换当前模块状态,也可以通过使用afxgetresourcehandle和afxsetresourcehandle来手动切换当前模块状态。具体使用方法如下:
在上述例子的第三步的showdlg函数的第一条语句前加上如下语句(要确保该语句在函数实现的第一行):
hinstance save_hinstance = afxgetresourcehandle();
afxsetresourcehandle(theapp.m_hinstance);