Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Aus Anwendung heraus '.exe' mit ResourceString bearbeiten

  Alt 12. Dez 2012, 17:56
Habe aus Langeweile mal eine kleine Demo gebastelt (vollständiger Code & Kompilat im Anhang).

Delphi-Quellcode:
type
  TResourceDataClass = class of TResourceData;
  TResourceData = class(TdxDataContainer)

  end;
TdxDataContainer ist eine kleine Klasse von mir, welche 2 abstrakte Methoden LoadFromStream() und SaveToStream() enthält, die in jeder Unterklasse implementiert werden müssen.

Folgende Funktion wird zum Schreiben der Daten verwendet:
Delphi-Quellcode:
function WriteResource(Filename: String; lpName: PChar; lpType: PChar;
  wLanguage: Word; ResourceData: TResourceData): Boolean;
var
  MS: TMemoryStream;
  hUpdate: THandle;
begin
  Result := false;
  MS := TMemoryStream.Create;
  try
    ResourceData.SaveToStream(MS);
    MS.Position := 0;
    hUpdate := BeginUpdateResource(PChar(Filename), false);
    if (hUpdate <> 0) and (hUpdate <> INVALID_HANDLE_VALUE) then
    try
      Result := UpdateResource(hUpdate, lpType, lpName, wLanguage,
        MS.Memory, MS.Size);
    finally
      Result := Result and EndUpdateResource(hUpdate, false);
    end;
  finally
    MS.Free;
  end;
end;
Das Auslesen funktioniert folgendermaßen:
Delphi-Quellcode:
function ReadResource(hInstance: HINST; lpName: PChar; lpType: PChar;
  ResourceDataClass: TResourceDataClass): TResourceData;
var
  RS: TResourceStream;
begin
  Result := nil;
  if not ResourceExists(hInstance, lpName, lpType) then Exit;
  RS := TResourceStream.Create(hInstance, lpName, lpType);
  try
    RS.Position := 0;
    Result := ResourceDataClass.Create;
    Result.LoadFromStream(RS);
  finally
    RS.Free;
  end;
end;
Angehängte Dateien
Dateityp: rar ResourceDemo.rar (244,8 KB, 35x aufgerufen)
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat