![]() |
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:
Nur wie lese ich das, was in Edit2.Text stand in der .exe, in die der Text geschrieben wurde wieder aus?
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. |
Re: UpdateResource String auslesen
FindResource + LoadResource
LoadString LoadStr TResourceStream ... Es gibt viele Methoden und Wege. |
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 20:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz