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

    问题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;
直接使用这个方法就可以将对应的资源文件提出来放入流文件中

      

你可能感兴趣的:(DLL,资源文件,Delphi,delphi,dll,资源文件)