Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   UpdateResource String auslesen (https://www.delphipraxis.net/151449-updateresource-string-auslesen.html)

SyntaxXx 18. Mai 2010 15:26


UpdateResource String auslesen
 
Hallo und zwar wollte ich via UpdateResource einen String in eine .exe schreiben und diese dann in dem Programm, indem der Text Gespeichert wurde, wieder ausgeben.

Nach langem gesuche habe ich nun den Teil, indem ich einen Text in eine .exe schreiben kann.

Delphi-Quellcode:
function WriteRes(sServerFile: string; pFile: pointer; Size: integer; Name: String): Boolean;
var
Hand: THandle;
pwServerFile: PWideChar;
pwName: PWideChar;
begin
GetMem(pwServerFile, (Length(sServerFile) + 1) *2);
GetMem(pwName, (Length(Name) + 1) *2);
try
StringToWideChar(sServerFile, pwServerFile, Length(sServerFile) * 2);
StringToWideChar(Name, pwName, Length(Name) * 2);
Hand := BeginUpdateResourceW(pwServerFile, False);
Result := UpdateResourceW(Hand, MakeIntResourceW(10), pwName, 0, pFile, Size);
EndUpdateResourceW(Hand, False);
finally
FreeMem(pwServerFile);
FreeMem(pwName);
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var Text : string;
begin
Text := Edit2.Text;
WriteRes(OpenDialog1.FileName, @Text, length(Edit2.Text), 'Text');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Edit1.Text := OpenDialog1.FileName;
end;

end.
Nur wie lese ich das, was in Edit2.Text stand in der .exe, in die der Text geschrieben wurde wieder aus?

himitsu 18. Mai 2010 15:34

Re: UpdateResource String auslesen
 
FindResource + LoadResource
LoadString
LoadStr
TResourceStream
...

Es gibt viele Methoden und Wege.

SyntaxXx 18. Mai 2010 15:53

Re: UpdateResource String auslesen
 
Bei FindResource muss man irgendwie mit ner .rc Datei arbeiten etc , da blick ich nich wirklich durch.

Also mein Problem liegt im mom darin.

Ich habe ja nun eine .exe in der die ganezn befehle stehen.
Und ganz am Ende steht dann mein Text, so stelle ich mir das vor.

Gibt es den nicht irgenwo nen guts Tut was sich damit befasst?
Irgenwie finde ich da nichts richtiges.

Ich schaue aber mal weiter ^^



Edit:

So hab da jetzt mal was gefunden.
Der Code von meiner .exe, die den Text wieder ausgeben soll sieht jetzt so aus:

Delphi-Quellcode:
function GetResourceAsPointer(ResName: pchar; ResType: pchar; out Size: longword): pointer;
var
InfoBlock: HRSRC;
GlobalMemoryBlock: HGLOBAL;
begin
InfoBlock := FindResource(hInstance, resname, restype);
size := SizeofResource(hInstance, InfoBlock);
GlobalMemoryBlock := LoadResource(hInstance, InfoBlock);
Result := LockResource(GlobalMemoryBlock);
end;

function GetResourceAsString(ResName: pchar; ResType: pchar): string;
var
ResData: PChar;
ResSize: Longword;
begin
ResData := GetResourceAsPointer(resname, restype, ResSize);
SetString(Result, ResData, ResSize);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := GetResourceAsString(pchar('Text'), RT_RCDATA);
end;

end.


Aber Wenn ich als Text "Test" eingebe, bekomme ich "Te偔う" ausgegeben.
Warum das?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz