怎样读取Dll中的资源文件

Bigrosoft 2009-02-27 11:05:48
各位:

好!

开发时把一些嵌入式资源, 如css, js, jpg等文件嵌入到dll中了. 考虑到效率, 需要在安装时把这些dll中的资源读取出来,
并输入文件到WebSite下面, 比如在website下面生成 a.js, a.jpg等, 页面中的代码会直接读取这些文件而不从dll中读取了.

有没有比较好的组件类, 多谢!
...全文
862 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
drivedreams 2011-10-19
  • 打赏
  • 举报
回复
用 reflector 反编译
sue3140 2010-03-30
  • 打赏
  • 举报
回复
来学习下的
Jinglecat 2009-02-27
  • 打赏
  • 举报
回复
Jinglecat 2009-02-27
  • 打赏
  • 举报
回复
关键是就是用 Assembly.GetManifestResourceStream 方法获取一个指向 resx 的 Stream,

获取其他程序集可以用 Assembly.GetAssebmly Assembly.Loadxxx 等方法
Jinglecat 2009-02-27
  • 打赏
  • 举报
回复
// 假设 EmbeddedResxTestConsoleApp 项目下有 Readme.txt 作为嵌入资源,
Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("EmbeddedResxTestConsoleApp.Readme.txt"); // 注意需要加上对应的命名空间
TextReader reader = new StreamReader(stream);
string txt = reader.ReadToEnd();
Console.WriteLine(txt);
Console.Read();
wukai555 2009-02-27
  • 打赏
  • 举报
回复
没试过
帮顶~
dxpws 2009-02-27
  • 打赏
  • 举报
回复
下面建立一个简单的dll为例,dll实现建立一个文件,并将读到的String Table资源写到此文件中。
步骤如下:
1)在VC菜单中File->New新建一个命名为dlltest的Win32 Dynamic-Link Library工程,下一步选择
A simple DLL project。

2)在dlltest.cpp文件中添加代码:
#include "stdafx.h"
#include "stdio.h"
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
switch(fwdreason)
{
case DLL_PROCESS_ATTACH:
int i;
FILE *fw;
fw = fopen(filename, "w");
char str[200];
LoadString(hinstDLL,1,filename,MAX_PATH);
fprintf(fw,"%s\n", filename);
break;
default:
break;
}
return(TRUE);
}

3)在VC菜单中Insert->Resource添加一个String Table,其ID为IDS_STRING1,Caption为abc,点击保
存,文件名为Script1.rc。

4)在Header Files中添加进resource.h; Resource Files中添加进Script1.rc。

5)在dlltest.cpp中添加头文件resource.h。

6)编译完成文件。


一个最简单的调用例子:

#include <stdio.h>
#include <windows.h>
int main(int argc, char *argv[])
{

HINSTANCE hDll;
hDll = LoadLibrary("dlltest.dll"); //加上路径
return 0
}

可看到在修改IDS_STRING1的caption时,可读到不同的字符串。



类似地,可读取其他资源:

函数为:

HBITMAP LoadBitmap(HINSTANCE hInstance,LPCTSTR lpBitmapName)
HICON LoadIcon(HINSTANCE hInstance,LPCTSTR lpIconName)
HMENU LoadMenu(HINSTANCE hInstance,LPCTSTR lpMenuName)
int LoadString(HINSTANCE hInstance,UINT uID,LPTSTR lpBuffer,int BufferMax)
Jinglecat 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hbxtlhx 的回复:]
需要在安装时把这些dll中的资源读取出来
---------------
既然这样为什么不直接把这些资源直接打到安装包里直接使用呢?

[/Quote]

同问
北京的雾霾天 2009-02-27
  • 打赏
  • 举报
回复
需要在安装时把这些dll中的资源读取出来
---------------
既然这样为什么不直接把这些资源直接打到安装包里直接使用呢?
阿云ivan 2009-02-27
  • 打赏
  • 举报
回复
没试过
帮顶~
金大哈 2009-02-27
  • 打赏
  • 举报
回复
关注
高三石 2009-02-27
  • 打赏
  • 举报
回复
UP
weilong147247943 2009-02-27
  • 打赏
  • 举报
回复
和楼主一起学习!
大神来了丶 2009-02-27
  • 打赏
  • 举报
回复
帮顶 不懂 学习

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧