如何在MFC中操作资源句柄

时间:2021-10-07 05:04:04

如何获取动态库中对话框相关资源,避免因资源问题报错?

AfxGetResourceHandle用于获取当前资源模块句柄
AfxSetResourceHandle则用于设置程序目前要使用的资源模块句柄。

#ifndef _MACRO_H #define _MACRO_H

#define CLASS_EXPORT __declspec(dllexport)    //导出类
#define API_EXPORT    __declspec(dllimport)    //导出函数

//获取动态库中对话框相关资源,避免因资源问题报错
 #ifndef _UNICODE #define GS_LPCSTR LPCSTR
#else
#define GS_LPCSTR LPCWSTR
#endif #ifndef __DLLRESOURCE_FUNC #define __DLLRESOURCE_FUNC
#define MCR_BEGIN_GET_DLLRES(macro_flag, dllname)    \ BEGIN_GET_DLLRES(macro_flag, dllname); #define MCR_END_PUT_DLLRES(macro_flag, hinst)    \ END_PUT_DLLRES(macro_flag, hinst); HINSTANCE BEGIN_GET_DLLRES(UINT macro_flag, GS_LPCSTR dllname); VOID END_PUT_DLLRES(UINT macro_flag, HINSTANCE hinst); static HINSTANCE BEGIN_GET_DLLRES(UINT macro_flag, GS_LPCSTR dllname) { #ifndef macro_flag HINSTANCE hinstOld = AfxGetResourceHandle(); #ifdef _DEBGU AfxSetResourceHandle(GetModuleHandle(dllname)); #else AfxSetResourceHandle(GetModuleHandle(dllname)); #endif
    return hinstOld; #endif
    return 0; }; static void END_PUT_DLLRES(UINT macro_flag, HINSTANCE hinst) { #ifndef macro_flag AfxSetResourceHandle(hinst); #endif }; #endif //_DLLRESOURCE_FUNC
#endif    //_MACRO_H