资源DLL是怎么回事?
其实也就是建一个包含资源的DLL,加载该DLL并从该DLL读取相关资源。API如下:
HINSTANCE LoadLibrary(
LPCTSTR lpLibFileName // address of filename of executable module
);
HGLOBAL LoadResource(
HMODULE hModule, // resource-module handle
HRSRC hResInfo // resource handle
);
HRSRC FindResource(
HMODULE hModule, // module handle
LPCTSTR lpName, // pointer to resource name
LPCTSTR lpType // pointer to resource type
);
void AfxSetResourceHandle( HINSTANCE hInstResource );]
HINSTANCE AfxGetResourceHandle( );
CString::LoadString(UINT nID) calls:
int AFXAPI AfxLoadString(UINT nIDS, LPTSTR lpszBuf, UINT nMaxBuf = 256);
MFC怎么在应用程序框架中自动加入资源(mfc的光标对话框等)
MFC的文件保存在如下位置:
X:\Microsoft Visual Studio\VC98\MFC\Include
X:\Microsoft Visual Studio\VC98\MFC\Lib
X:\Microsoft Visual Studio\VC98\MFC\SRC
其中include文件包含了资源的头文件.h和定义文件.rc
MFC的这些资源怎么被神不知鬼不觉的编译链接到MFC程序中?
见下图:
程序源代码文件的物理位置规划
虽然不能直接把资源放到静态链接库中,但只要稍做变通,就能弄出一个可以到处使用的对话框静态链接库了。
但还有个问题是如何避免资源ID的冲突
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 227
#define _APS_NEXT_COMMAND_VALUE 32831
#define _APS_NEXT_CONTROL_VALUE 1274
#define _APS_NEXT_SYMED_VALUE 104
#endif
#endif