[Delphi]Update Zasobów

Odpowiedz Nowy wątek
2007-05-02 17:52
0

Pisząc program który miałby zmieniać zasoby innego programu, napotkałem następujący problem:
Program1 służy do aktualizowania programu2, program2 zawiera tablice stringów
STRINGTABLE
BEGIN
1,"linia1"
END
i chciałem wykorzystując delphi sprawić, aby tekst "linia1" został zastąpiony tekstem "nowalinia".

procedure TForm1.zasoby(str:string);
const
ID1=MakeIntResource(1);
var
  U: THandle;
  Res: TResourceStream;
begin
  Res := TResourceStream.Create(hinstance,ID1,RT_STRING);
  U:=BeginUpdateResource(PCHAR(GetCurrentDir+'\program2.exe'),FALSE);
  UpdateResource(U, RT_STRING,ID1,LANG_NEUTRAL,Res.Memory,Res.Size);
  EndUpdateResource(U, FALSE);
end;

Trochę czasu już się z tym mecze i co bym nie zrobił to i tak nie działa. Przejrzałem
forum i znalazłem tematy z takim samym problem, jednak jakoś pobieżnie traktują
rozwiązanie tego problemu i nie udało mi się poprawić tego kodu tak aby dział.
Co trzeba dodać/zmienić aby parametr str przekazywany do procedury został zapisany na miejscu "linia1"? Byłbym wdzięczny za pomoc. PzDr.

Pozostało 580 znaków

2007-05-03 21:07
0

ehh poszukaj dobrze napewno gdzies jest to opisane. Popatrz w topicu mojego autorstwa(opcja szukaj)

Pozostało 580 znaków

2007-05-03 23:05
0

Hm zanim założyłem ten temat przejrzałem wszystko co znalazłem na temat update'u zasobów i twój temat również przeczytałem. Nie za bardzo mi to pomogło, a tej tablicy stringów nadal nie mogę rozgryźć. PzDr,

Pozostało 580 znaków

2007-05-04 08:18
0
 H:= BeginUpdateResource(PChar(Local+'Out.exe'), True);
  for I:= 0 to LstFile.Items.Count-1 do begin
    FH:= CreateFile(PChar(LstFile.Items[I]), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    Size:= GetFileSize(FH, nil);
    GetMem(Buf, Size);
    ReadFile(FH, Buf^, Size, BR, nil);
    CloseHandle(FH);
    UpdateResource(H, RT_RCDATA, PChar(UpperCase(ExtractFileName(LstFile.Items[I]))), MAKEWord(LANG_NEUTRAL, SUBLANG_NEUTRAL), Buf, Size);
    FreeMem(Buf);
  end;
  EndUpdateResource(H, False);

Tu masz troszke kodu z zastosowaniem tego może ci się przyda.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0