【每日一发】Delphi从Dll中提取自定义的资源文件

来源:互联网 发布:武汉群光有mac的专柜吗 编辑:程序博客网 时间:2024/05/13 22:50

    问题1:如何将资源文件放入DLL中呢?

    答案: 使用$R 这个编译命令加入你自定义的资源文件,然后编译即可。这样一个没有任何导出函数的dll就是一个包含了资源文件的DLL。Delphi制作资源资源文件很方便,新建一个文本文件,将后缀改为 .rc. 使用文本编辑器打开rc,除了系统预定义的一些资源类型,当然我们也可以自己定义,简单的说就是 三列,分别对应资源名称,资源类型,资源文件,资源文件记得需要使用双引号。例如:

      MyTestRES  myRes "d:\res\mydata"


    问题2: 提取资源文件

   

function GetResouceFromDll(const DllName: string; ResName, ResType: String; const streamForResource: TMemoryStream): Boolean;var  dllHandle: THandle;  resPoint: PChar;  resSize: Integer;  ResModHandle: Integer;  ResMemHandle: Integer;begin
  Result := False;  dllHandle := LoadLibrary(PChar(DllName));  resPoint := nil;  resSize := 0;  ResMemHandle := 0;  try
    try    //找到资源的句柄    ResModHandle := FindResource(dllHandle, PChar(ResName), PChar(ResType));    //加载资源到内存    ResMemHandle := LoadResource(dllHandle, ResModHandle);    //获取资源的引用    resPoint := LockResource(ResMemHandle);    //获取资源的大小    resSize := SizeofResource(dllHandle, ResModHandle);    streamForResource.SetSize(resSize);    streamForResource.Seek(0, 0);    streamForResource.Write(resPoint^, resSize);
    except
      Result := False;
    end;  finally    if dllHandle > 0 then      FreeLibrary(dllHandle);    if ResMemHandle > 0 then      FreeResource(ResMemHandle);  end;end;
直接使用这个方法就可以将对应的资源文件提出来放入流文件中

      

0 0
原创粉丝点击