VC程序运行时导出资源、DLL、EXE

在VC可以在可执行程序和调用动态静态库时动态的导出资源、DLL、exe。

首先把想要导出的资源导入,这里简单描述DLL资源导入的步骤:

1.在Resource View(资源视图)中查找到相应工程;

2.使用Add(添加)->Resource(资源);

3.选择Import(插入)资源;

4.在选择资源后弹出Custom ResourceType(自定义资源类型)输入自定义的类型名,至此资源插入完毕;

所需函数:

FindResource确定指定模块中指定类型和名称所在的位置

[html]  view plain  copy
  1. HRSRC FindResource(HMODULE hModule,  
  2.     LPCTSTR lpName,  
  3.     LPCTSTR lpType)  

hModule处理包含资源的可执行文件的模块,NULL值指定了模块句柄指向操作系统通常情况下创建最近过程的相关文件;

lpName指定资源名称;

lpType指定资源的类型,就是上面所自定义资源类型;

SizeofResource返回指定资源字节数大小

[html]  view plain  copy
  1. DWORD SizeofResource(HMODULE hModule,  
  2.     HRSRC hReslnfo)  

hModule包含资源的可执行文件的句柄,如果为空当前文件(我是这么理解的);

hReslnfo资源句柄,句柄必须使用FindResource函数创建;

如果返回0则失败,通过DWORD的寻址范围可看出文件的最大大小;

LoadResource该函数装载指定资源到全局储存器

[html]  view plain  copy
  1. HGLOBAL LoadResource(HMODULE hModule,  
  2.     HRSRC hReslnfo)  

参数同上

如果运行成功返回相关资源的句柄,如果运行失败返回NULL

LockResource锁定内存中的指定资源;

[html]  view plain  copy
  1. LPVOID LockResource(HGLOBAL hResData)  

失败返回NULL,成功返回资源指针,可以重IO输出成文件

释放相关资源函数:

CloseHandle ()

FreeResource ()

代码如下:

[html]  view plain  copy
  1. HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(IDR_DLL1), TEXT("DLL"));  
  2. if (NULL == hRsrc){  
  3.     return;}  
  4. DWORD dwSize = SizeofResource(NULL, hRsrc);   
  5. if (0 == dwSize){  
  6.     return;}  
  7. HGLOBAL gl = LoadResource(NULL, hRsrc);   
  8. if (NULL == gl){  
  9.     return;}   
  10. LPVOID lp = LockResource(gl);   
  11. if (NULL == lp){  
  12.     return;}  
  13. CString filename="dd.dll";  
  14. HANDLE fpCreateFile(filename ,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);   
  15. DWORD a;   
  16. if (!WriteFile (fp,lp,dwSize,&a,NULL)){  
  17.     return;}  
  18. CloseHandle (fp);  
  19. FreeResource (gl);  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蚂蚁_CrkRes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值