Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1992506
  • 博文数量: 950
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 13070
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-04 09:23
文章分类

全部博文(950)

文章存档

2011年(1)

2008年(949)

我的朋友

分类: C/C++

2008-08-04 09:36:12

下载本文示例代码
下载源代码

本文内容适用于所有使用.net v1.1及以上框架的语言。

前传1:提出问题(急于了解正式内容的读者请转到下面的正传部分^_^)

  前段时间写了一篇题为“VC.NET轻松实现按钮控件自绘”的文章,其中按钮按下时的效果是由一张图片呈现的。这时问题就来了,最初我将该图片加入资源列表(.rc)中,然后使用下面的2个读取资源的方法;编译通过,可执行时程序抛出异常,提示找不到资源文件。


	//方法1,从指定的hinstance中名为bitmapName的资源创建Bitmap对象

	public: static Bitmap* System::Drawing::Bitmap::FromResource(IntPtr hinstance,String* bitmapName);



	//方法2,使用构造函数从指定的type类中提取的resource资源初始化Bitmap对象

	public: System::Drawing::Bitmap::Bitmap(Type* type,String* resource);		
前传2:分析问题

  接着我就犯难了,在论坛上提出该问题,没有得到建设性的回答,为了赶时间只好匆匆将图片和程序放在一起发布了。事后回想一下心里挺不是滋味,将分离的资源文件和程序文件一起发布,搞的目录里乱七八糟很不好看,为什么加入资源的图片不能用呢?会不会是资源没有打包进.exe文件呢?于是我用2进制查看工具打开资源图片和.exe文件,做了下对比,结果发现资源图片已打包进.exe文件:

  资源虽已打包进.exe文件,可是除了上面提到的那两个方法,似乎再没有其它读取内部资源的函数了,那怎么办呢?

前传3:看到解决问题的曙光

  打开MSDN,查找有关"资源"的索引,看了半天,最后终于弄明白了,原来.net框架对通过资源编辑器(.rc)打包进程序的资源不再提供支持,而改用一种名为"托管资源"的资源。那么这种资源与普通的非托管资源有何异同?既然不能使用Visual Stdio 200x提供的资源编辑器(.rc)打包资源,这种资源又该怎么打包进程序?打包成功后又应该怎样去使用呢?

正传1:什么是托管资源

  资源可以理解为是在逻辑上由应用程序部署的任何非可执行数据,托管资源其本质也大抵如此。那么mfc使用的rc资源和.net使用的托管资源有什么区别呢?请看下表:
 

下载本文示例代码
资源类型 Windows支持度(注1)

索引方式

可否打包"对象" 独立于.exe打包的难易度 资源的部署 其它
.rc资源

95/98/me/nt/2000及以上

依靠资源ID找到资源

不可以

使用纯资源DLL,比较麻烦

由程序员决定,管理混乱

还没想好:)

.net托管资源

目前还没有支持的

取消资源ID,改为依靠资源名,也可以依靠资源的值(内容)

可序列化的就可以

使用专用的资源文件,很简单

由程序集统一管理(注2)

阅读(363) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~