如何获取动态库中对话框相关资源,避免因资源问题报错?
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