自定义资源

自定义资源的语法格式为

      资源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中了

         例如:在资源列表中可看到(此处例举不是xML类型资源)

             定义资源文件

                资源文件

 

 

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

 

4.使用嵌入的XML资源。

代码如下

  1. staticBOOL LoadEmbedResource()
  2. {
  3. CStringA strRet;
  4. //#define IDR_XML1 106
  5. HRSRC hRsrc = ::FindResource(NULL, MAKEINTRESOURCE(106),L"XML");
  6. if (NULL == hRsrc)
  7. return FALSE;
  8. DWORD dwSize = ::SizeofResource(NULL, hRsrc);
  9. if (0 == dwSize)
  10. return FALSE;
  11. HGLOBAL hGlobal = ::LoadResource(NULL, hRsrc);
  12. if (NULL == hGlobal)
  13. return FALSE;
  14. LPVOID pBuffer = ::LockResource(hGlobal);
  15. if (NULL == pBuffer)
  16. return FALSE;
  17. memcpy(strRet.GetBuffer(dwSize + 1), pBuffer, dwSize);
  18. OutputDebugStringA((LPCSTR)strRet);
  19. strRet.ReleaseBuffer(dwSize);
  20. ::FreeResource(hGlobal);
  21. return TRUE;
  22. }

 

输出结果为

<skins>

< /skins>

 

 

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

posted @ 2012-04-21 23:34  血马雄风  阅读(228)  评论(0)    收藏  举报