自定义VC资源

最近,在看金山的bkkuilib界面库,发现了以前不了解的vc 自定义资源技术。经数小时研究,成此文。

 

自定义资源的语法格式为

资源ID     自定义资源类型名    文件路径

 

 添加自定义资源的步骤如下

1.按上语法格式,在rc文件中添加语句。

2.在resource.h头文件中,定义资源ID。

3.使用FindResoource等API,使用自定义资源。

 

举例:添加自定义资源,资源名为XML。并在IDE 输出窗口中输出XML语句

1.打开rc文件,添加如入语句

IDR_XML1                XML                     "skins//def_skin.xml"
IDR_XML5                XML            "skins//dlg_main.xml

 

def_skin.xml的文件内容为

<skins>

</skins>

2.打开resource.h头文件,添加如下语句

#define IDR_XML2                        105
#define IDR_XML1                        106
#define IDR_XML5                        107

 

3.编译。我们先看一下,XML类型的自定义资源是否嵌入到exe中了

如下图所示

自定义VC资源_第1张图片

 

xml资源已经嵌入到exe中了。

 

4.使用嵌入的XML资源。

代码如下

static BOOL LoadEmbedResource() { CStringA strRet; //#define IDR_XML1 106 HRSRC hRsrc = ::FindResource(NULL, MAKEINTRESOURCE(106),L"XML"); if (NULL == hRsrc) return FALSE; DWORD dwSize = ::SizeofResource(NULL, hRsrc); if (0 == dwSize) return FALSE; HGLOBAL hGlobal = ::LoadResource(NULL, hRsrc); if (NULL == hGlobal) return FALSE; LPVOID pBuffer = ::LockResource(hGlobal); if (NULL == pBuffer) return FALSE; memcpy(strRet.GetBuffer(dwSize + 1), pBuffer, dwSize); OutputDebugStringA((LPCSTR)strRet); strRet.ReleaseBuffer(dwSize); ::FreeResource(hGlobal); return TRUE; }

 

输出结果为

<skins>

</skins>

 

 

其实,内嵌资源就是pe 文件结构中的一个段,如果想更清楚的了解exe资源问题,请参看pe文件结构。

 

你可能感兴趣的:(xml,api,null,ide,exe,金山)