码迷,mamicode.com
首页 > 其他好文 > 详细

把dll打包到程序中并在执行时释放

时间:2015-01-21 18:13:41      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:dll打包到程序中   dll作为资源   

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)

参考文档: http://blog.sina.com.cn/s/blog_5f432e6a0100uaet.html

 

编写MFC程序的时候,使用dependency查看依赖时,会看到有依赖MFC的库,通常都包含如下这两个:

MSCVCR100/90/80/70.dll库是一个很独立的库它只依赖库Kenel32/kenel64

MFC100/90/80/70.dll也相对独立依赖MSCVCR库和一些其它windows系统库依赖相对较多一点但在windows下一般都是有的。

    但编写MFC程序时,我们希望程序能在别人的电脑上运行,就需要额外把这些库也安装到别人的机器上去了,通常有几种方法

    a. 你可以发布程序的时候带上这两个依赖库一块发布。

    b. 使用installshield类似工具做一个安装包

    c. 把dll作为资源放到程序中,运行时释放出来,

        c.1 例如使用工具(单文件制作封装工具(Enigma Virtual Box)V7.20 中文版)  

        c.2 自己代码实现dll释放

   

    本次重点介绍c.2(实现dll打包到程序中并在执行时释放)的实现方法,

    首先,把这个库作为资源放到工程中,例如 "DllResourc" "xxx.dll"

    然后,在程序一开始的地方,把这个dll释放出来,释放方法 FindResource, LoadResource, LockResource, ResourceSize,创建文件,写文件。

    样例代码如下:

Do

     {

         // 参考: http://blog.sina.com.cn/s/blog_5f432e6a0100uaet.html

 

         // begin export file

         // 查找资源

         HRSRC hRsrc =::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_DLLRESOURCE_VC100x86), _T("DllRESOURCE"));

         DWORD dwError = GetLastError();

         if(hRsrc ==NULL)

              break;

 

         // 加载资源

         HGLOBAL hImgData =::LoadResource(AfxGetResourceHandle(), hRsrc);

         if(hImgData ==NULL)

         {

              ::FreeResource(hImgData);

              break;

         }

 

         // 锁定内存中的指定资源

         LPVOID lpVoid    =::LockResource(hImgData);

         DWORD dwSize    =::SizeofResource(AfxGetResourceHandle(), hRsrc);

 

         // 把资源数据写出到文件

         CFile file;

         file.Open(_T("C:\\abc.dll"), CFile::modeCreate|CFile::modeWrite);

         file.Write(lpVoid, dwSize);

         file.Close();

 

         // 释放资源

         ::FreeResource(hImgData);

 

         // end export file

     }while(false);

 

 

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源)

 

 

把dll打包到程序中并在执行时释放

标签:dll打包到程序中   dll作为资源   

原文地址:http://blog.csdn.net/chunyexiyu/article/details/42971253

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!