| 
			
			 
			
				10.12.2010, 16:37
			
			
			
		 | 
	| 
		
			|  | Начинающий |  | 
					Регистрация: 08.09.2008 Сообщения: 193
 Репутация: 12694     |  | 
	| 
				  
 Вот решил всё вынести в отдельный модуль. 
	Код: unit uExtractFileFromResources;
{
  Extracting any resources to file
  Author:  BoRoV
  Date:    10 dec 2010
  Using:
  1. Extracting from itself:
  ...
  if not ExtractResToFile(HInstance, 'BIN', RT_RCDATA, 'C:\file.bin') then
    MessageBox(0, PChar(SysErrorMessage(GetLastError())), 'Error', 16);
  ...
  2. Extracting from another module:
  ...
  hFile: DWORD;
  ...
  hFile := LoadLibrary('C:\file.exe');
  if (hFile <> 0) then
  begin
    if not ExtractResToFile(hFile, 'BIN', RT_RCDATA, 'C:\file.bin') then
      MessageBox(0, PChar(SysErrorMessage(GetLastError())), 'Error', 16);
    FreeLibrary(hFile);
  end;
  ...
}
interface
uses
  Windows;
  // Declaration
  function ExtractResToFile(hInst: DWORD; ResourceName: PChar; ResourceType: PChar; FileName: PChar): Boolean;
implementation
function ExtractResToFile(hInst: DWORD; ResourceName: PChar; ResourceType: PChar; FileName: PChar): Boolean;
var
  hRes, hMod, hFile, dwSize, n: DWORD;
  pBuffer: Pointer;
begin
  Result := False;
  hMod := FindResource(hInst, ResourceName, ResourceType);
  if (hMod <> 0) then
  begin
    dwSize := SizeofResource(hInst, hMod);
    hRes := LoadResource(hInst, hMod);
    if (hRes <> 0) then
    begin
      pBuffer := LockResource(hRes);
      if (pBuffer <> nil) then
      begin
        hFile := CreateFile(FileName, GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, 0, 0);
        if (hFile <> INVALID_HANDLE_VALUE) then
        begin
          SetFilePointer(hFile, 0, nil, FILE_BEGIN);
          if WriteFile(hFile, pBuffer^, dwSize, n, nil) then
            if (dwSize = n) then
              Result := True;
          CloseHandle(hFile);
        end;
      end;
      FreeResource(hRes);
    end;
  end;
end;
end.
			
			
			
			
				  |