Извлекаем ресурс в файл
Code: |
function ExtractResource: Boolean; const ResName = 'RES_MDB';
function FileWrite(Handle: Integer; const Buffer; Count: LongWord): Integer; const BlockSize = 1024;
type TArray = array of Byte;
var Buff: array [0..BlockSize - 1] of Byte; Counter, CurCount, A, I: LongWord; begin Counter := 0; Result := Count; I := 10; repeat if Count - Counter > BlockSize then CurCount := BlockSize else CurCount := Count - Counter;
Move(TArray(@Buffer)[Counter], Buff[0], CurCount); if WriteFile(THandle(Handle), Buff, CurCount, LongWord(Result), nil) then Inc(Counter, CurCount) else begin Result := -1; Exit; end;
A := Round((Counter / Count) * 100); if A > I then begin I := A; SendMessage(Progress, PBM_SETPOS, A, 0); end;
until Counter = Count; end;
var ResHandle: HWND; ResData: HWND; LockRes: Pointer; fHandle: Integer; Size: Integer; begin Result := False; try ResHandle := FindResource(HInstance, PChar(ResName), 'INSTALL'); if ResHandle = 0 then Exit; ResData := LoadResource(HInstance, ResHandle); if ResData = 0 then Exit; try LockRes := LockResource(ResData); if not Assigned(LockRes) then Exit; try fHandle := FileCreate(BasePath + '\MainDB.~mdb'); if fHandle = -1 then Exit; try Size := SizeofResource(HInstance, ResHandle);
if FileWrite(fHandle, LockRes^, Size) = -1 then Exit;
Result := True; StatusDone := True; finally CloseHandle(THandle(fHandle)); end; finally UnlockResource(ResData); end; finally FreeResource(ResData); end; finally PostMessage(Handle, WM_NOTIFY_THREAD_RESULT, Integer(Result), 0); end; end; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!