[VC++]成功实现资源释放(原创+转载)
2013-07-18 14:27
323 查看
几个月前我突然对资源释放起了浓厚的兴趣,于是在网上搜啊搜,内容几乎被一篇文章这里面的内容所垄断了,由于文章上只给了部分源码,而其他的则需要10分CSDN分去下载,于是我就搁置了几个月。
最近又想到这个东西,由于好奇心很重,我还是搜了一下,在http://www.cctry.com/thread-10129-1-1.html网址中找到了一个不用花钱的下载链接(你也可以点击这里下载),于是我就打开来看看,我没学过MFC,对那些Dlg函数不感兴趣,总算找到了最关键的源码(这一段是网上有的,我现在才知道那个人是把关键代码贴出来了):
#include <stdio.h>
#include <windows.h>
#include <afxwin.h>
最好还加上:
#include "resource.h"
先不要问这个resource.h是哪里来的。
现在,再新建一个.cpp文件,输入以下内容(复制也可以,
)
右击空白处,点击“插入”出现以下界面。
因为我们这次用EXE文件做实验,所以单击“Dialog”,然后点击“引入”,这时会弹出一个文件选择框(关于如何实现文件选择,请参见这里)
选好之后,在框中输入“EXE”(引号不加),如“自定义资源类型”图。点击确定。
这时候,rc中就会出现你刚才添加的EXE了。保存rc文件,并且将它添加到工程,再把resource.h添加到工程,然后就可以编译运行,你就等着”释放文件成功“这个提示弹出吧!
(注意事项)
编译没问题,但运行后可能会出现
--------------------Configuration: 临时 - Win32 Debug--------------------
Linking...
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/临时.exe : fatal error LNK1120: 2 unresolved externals
执行 link.exe 时出错.
临时.exe - 1 error(s), 0 warning(s) 这个错误,解决方案你可以参考http://sunnysab.blog.163.com/blog/static/18037500920129273537269/。
最近又想到这个东西,由于好奇心很重,我还是搜了一下,在http://www.cctry.com/thread-10129-1-1.html网址中找到了一个不用花钱的下载链接(你也可以点击这里下载),于是我就打开来看看,我没学过MFC,对那些Dlg函数不感兴趣,总算找到了最关键的源码(这一段是网上有的,我现在才知道那个人是把关键代码贴出来了):
/************************************************************************/ /* 函数说明:释放资源中某类型的文件 /* 参 数:新文件名、资源ID、资源类型 /* 返 回 值:成功返回TRUE,否则返回FALSE /* By:Koma 2009.07.24 23:30 /************************************************************************/ BOOL ReleaseRes(CString strFileName,WORD wResID,CString strFileType) { // 资源大小 DWORD dwWrite=0; // 创建文件 HANDLE hFile = CreateFile(strFileName, GENERIC_WRITE,FILE_SHARE_WRITE,NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if ( hFile == INVALID_HANDLE_VALUE ) { return FALSE; } // 查找资源文件中、加载资源到内存、得到资源大小 HRSRC hrsc = FindResource(NULL, MAKEINTRESOURCE(wResID), strFileType); HGLOBAL hG = LoadResource(NULL, hrsc); DWORD dwSize = SizeofResource( NULL, hrsc); // 写入文件 WriteFile(hFile,hG,dwSize,&dwWrite,NULL); CloseHandle( hFile ); // 启动EXE或COPY等后续操作省略 // ...... return TRUE; }新建一个空工程,不管是MFC的还是控制台的,我选择的是控制台工程,然后再新建一个.h文件,加入头文件:
#include <stdio.h>
#include <windows.h>
#include <afxwin.h>
最好还加上:
#include "resource.h"
先不要问这个resource.h是哪里来的。
现在,再新建一个.cpp文件,输入以下内容(复制也可以,
)
#include "include.h" int main() { if(ReleaseRes("ABC.exe",(WORD)IDR_EXE1,"EXE")) { printf("释放文件成功!\n"); } else { printf("释放文件失败!\n"); } return 0; }接下来就是资源的问题了,建立一个rc文件(我是点击资源框中的“版本”,新建版本之后系统会自动为你创建一个rc文件),结果如下:
右击空白处,点击“插入”出现以下界面。
因为我们这次用EXE文件做实验,所以单击“Dialog”,然后点击“引入”,这时会弹出一个文件选择框(关于如何实现文件选择,请参见这里)
选好之后,在框中输入“EXE”(引号不加),如“自定义资源类型”图。点击确定。
这时候,rc中就会出现你刚才添加的EXE了。保存rc文件,并且将它添加到工程,再把resource.h添加到工程,然后就可以编译运行,你就等着”释放文件成功“这个提示弹出吧!
(注意事项)
编译没问题,但运行后可能会出现
--------------------Configuration: 临时 - Win32 Debug--------------------
Linking...
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/临时.exe : fatal error LNK1120: 2 unresolved externals
执行 link.exe 时出错.
临时.exe - 1 error(s), 0 warning(s) 这个错误,解决方案你可以参考http://sunnysab.blog.163.com/blog/static/18037500920129273537269/。
相关文章推荐
- VC实现将资源打包并释放到指定文件夹
- VC++实现Contourlet图像处理[转载自http://blog.sina.com.cn/aclon]支持原创
- [原创]VC成功实现重启路由器(完整源码)
- VC实现将资源打包并释放到指定文件夹
- 【原创】纯VC++ 实现不等高CTreeCtrl(可用于好友列表)
- VC释放EXE资源文件
- VC中借助内嵌资源实现Flash动画播放
- .NET中实现正确的资源释放模式
- 通过RAII机制实现资源的自动释放
- 晒晒C++:虚函数的真相(VC编译器如何实现“virtual ”规则)(转载的非原创)
- vc实现多语言资源
- C++ 动态分配资源的自动释放 – auto_ptr的实现原理
- JAVA 实现jpg/tif/bmp 等图片格式互相转换,解决RenderedOp资源不能释放
- VC资源分配、释放表
- VC实现修改文件创建、访问、修改时间属性(转载)
- 用VC实现特定编辑框上对回车键响应(转载)
- vc释放资源文件
- VC++实现文件夹时间属性的获取与更改(转载)
- 动态分配资源的自动释放 – auto_ptr的实现原理
- VC中使用纯资源dll实现多语言版本