Registriert seit: 28. Mär 2005
Ort: Hamburg
848 Beiträge
Delphi 11 Alexandria
|
UpdateResource/TResourceStream Probleme mit Delphi 2009
20. Aug 2009, 15:40
Hallo,
die nachfolgenden Funktionen habe ich mit einem Delphi 5 Projekt problemlos genutzt. Damit kann man Strings als Resource in eine EXE schreiben und wieder auslesen. Beim Auslesen ist der ausgelesene String nur halb so lang wie das Original. Wie kann man das lösen?
Delphi-Quellcode:
function LoadStrFromResDef(const ResName, Default: string): string;
var
ResStream: TResourceStream;
begin
if FindResource(HInstance, PChar(AnsiUpperCase(ResName)), RT_STRING) = 0 then
Result := Default
else
begin
ResStream := TResourceStream.Create(HInstance, AnsiUpperCase(ResName), RT_STRING);
try
SetLength(Result, ResStream.Size);
ResStream.ReadBuffer(Result[1], ResStream.Size);
finally
ResStream.Free
end;
end;
end;
function SaveStrToRes(const FileName: string; Data: TStringList): Boolean;
procedure SplitKeyValue(const s: string; out Key, Value: string; Separator: string = '=');
var
P: Integer;
begin
P := Pos(Separator, s);
if P < 1 then
begin
Key := s;
Value := '';
end
else
begin
Key := Copy(s, 1, P - 1);
Value := Copy(s, P + Length(Separator), Length(s));
end;
end;
var
hInst: Cardinal;
Key, Value: string;
i: Integer;
begin
Result := False;
if FileExists(FileName) and (Data.Count > 0) then
begin
hInst := BeginUpdateResource(PChar(FileName), False);
if hInst > 0 then
try
for i := 0 to Data.Count - 1 do
begin
SplitKeyValue(Data[i], Key, Value);
Result := UpdateResource(hInst, RT_STRING, PChar(AnsiUpperCase(Key)), LANG_NEUTRAL, @Value[1], Length(Value)) and Result;
//if not result then
// showmessage(IntToStr(GetLastError));
end;
finally
EndUpdateResource(hInst, False);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Strings: TStringList;
begin
Strings := TStringList.Create;
try
Strings.Add('Key1=Value1');
Strings.Add('Key2=Value2');
SaveStrToRes('Bsp.exe', Strings)
finally
Strings.Free;
end;
end;
Und in der Bsp.exe
Caption := LoadStrFromResDef('Key1', 'DEF');
|
|
Zitat
|