如何把资源文件放到DLL中?

chenxix 2002-09-06 02:03:13
我想把资源文件放到DLL中实现共享,请教大虾如何实现?
...全文
336 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Liusp 2002-11-19
  • 打赏
  • 举报
回复
采用静态调用方式


主程序代码:

function AiGetJpgRes(AResName:PChar):THandle; far;external 'Ai9Res.dll';
function AiGetBmpRes(AResName:PChar):THandle; far;external 'Ai9Res.dll';
function AiGetIcoRes(AResName:PChar):THandle; far;external 'Ai9Res.dll';
function AiGetCurRes(AResName:PChar):HCursor; far;external 'Ai9Res.dll';
function AiGetStrRes(AResName:Integer):String; far;external 'Ai9Res.dll';

其中JPG图的调用如下:
procedure TForm1.Button2Click(Sender: TObject);
var
Stream:TResourceStream;
MyJpg: TJpegImage;
begin

Stream :=TResourceStream.Create(AiGetJpgRes(PChar('LOGIN')),'LOGIN','JPEG');
Try
MyJpg:=TJpegImage.Create;
try
MyJpg.LoadfromStream(Stream);
Image1.Picture.Assign(MyJpg);
Finally
MyJpg.Free;
end;
Finally
Stream.Free;
end;
end;



DLL中代码:

{$R Ai92RES.RES}

function AiGetJpgRes(AResName:PChar): THandle; export;
begin
FindResource(hInstance, PChar('JPEG'),AResName);
Result := hInstance;
end;


function AiGetBmpRes(AResName:PChar): THandle;export;
begin
FindResource(HInstance,'BITMAP' ,AResName);
Result:=HInstance;
end;
function AiGetStrRes(AResName:Integer):string; export;
begin
Result:=LoadStr(AResName);
end;

function AiGetIcoRes(AResName:PChar): THandle; export;
begin
Result := LoadIcon(HInstance,AResName);
end;

function AiGetCurRes(AResName:PChar): HCursor; export;
begin
Result:=LoadCursor(HInstance,AResName);
end;

exports
AiGetBmpRes index 1,
AiGetJpgRes index 2,
AiGetIcoRes Index 3,
AiGetCurRes index 4,
AiGetStrRes index 5;
end.
u2m 2002-09-09
  • 打赏
  • 举报
回复
创建并编译一个空的DLL工程,在这个工程中包含你的.res资源文件。
示例:
library ResTest;
uses SysUtils;
{$R MYRES.RES}
begin

end.

使用这个纯资源DLL时,只需要简单地载入这个DLL,就可以使用你想使用的资源。
示例:
{$IFDEF WIN32}

const BadDllLoad = 0;

{$ELSE}

const BadDllLoad = 32;

{$ENDIF}

procedure TForm1.Button1Click(Sender: TObject);
var
h : THandle;
Icon : THandle;
begin
h := LoadLibrary('RESTEST.DLL');
if h <= BadDllLoad then
ShowMessage('Bad Dll Load')
else begin
Icon := LoadIcon(h, 'ICON_1');
DrawIcon(Form1.Canvas.Handle, 10, 10, Icon);
FreeLibrary(h);
end;
end;
chenxix 2002-09-06
  • 打赏
  • 举报
回复
非常感谢大家,不过songhtao(三十年孤独)大虾能否详细一点,谢谢!
我不懂电脑 2002-09-06
  • 打赏
  • 举报
回复
用Resource WorkShop往dll里放
taxi 2002-09-06
  • 打赏
  • 举报
回复
首先用记事本建立一个扩展名为.rc的文件,内容如下(供参考):
Music RCDATA "d:\Music\笑傲江湖.wav"
Video RCDATA "E:\delphi6\Demos\CoolStuf\SpeedIs.avi"
将其保存到工程文件所在目录,然后编译为资源文件,方法如下:
E:\delphi6\bin\brcc32.exe e:\YourProjectPath\xxxxx.res
然后在源文件中加入该资源文件
{$ xxxxxx.res}

//读取资源
procedure TForm1.Button1Click(Sender: TObject);
begin
with TResourceStream.Create(HInstance, 'Music', RT_RCDATA) do
begin
SaveToFile('c:\temp.wav');
Free;
end;
end;
Delphi_Li 2002-09-06
  • 打赏
  • 举报
回复
1、使用Brcc32将Rc文件编译成RES文件
2、在工程文件中加入{$R ****.Res}
***.Res是你的资源文件的名称!!!
Jackeystone 2002-09-06
  • 打赏
  • 举报
回复
{$ 资料文件.res}

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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