Hallo Delphi Praxis
Ich versuche mit einem Programm einen String in ein anderes zu schreiben um diesen dannach wieder auszulesen.
Hier der Code bisher:
Damit schreibe ich die Daten in die Datei:
Code:
Function WriteResData(sServerFile: string; pFile: pointer; Size: integer; Name: String):Boolean;
var
hResourceHandle: 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);
hResourceHandle := BeginUpdateResourceW(pwServerFile, False);
Result := UpdateResourceW(hResourceHandle, MakeIntResourceW(10), pwName, 0, pFile, Size);
EndUpdateResourceW(hResourceHandle, False);
finally
FreeMem(pwServerFile);
FreeMem(pwName);
end;
end;
Button Click Event ist also:
Code:
var
sBuffer: String;
begin
sBuffer := 'Hallo';
CopyFile(PChar(PChar(ExtractFilePath(ParamStr(0)) + 'test.exe')), PChar(ExtractFilePath(ParamStr(0)) + 'test2.exe'), false);
WriteResData(ExtractFilePath(ParamStr(0)) + 'test2.exe', PWideChar(sBuffer), Length(sBuffer), 'TEST');
Für das auslesen benutze ich folgenden Code:
Code:
function GetResources(pSectionName: PChar; out ResourceSize: LongWord): Pointer;
var
ResourceLocation: HRSRC;
ResourceHandle: HGLOBAL;
begin
ResourceLocation := FindResource(hInstance, PChar(pSectionName), RT_RCDATA);
ResourceSize := SizeofResource(hInstance, ResourceLocation);
ResourceHandle := LoadResource(hInstance, ResourceLocation);
Result := LockResource(ResourceHandle);
end;
function GetResourceAsString(pSectionName: pchar): string;
var
ResourceData: PChar;
SResourceSize: LongWord;
begin
ResourceData := GetResources(pSectionName, SResourceSize);
SetString(Result, ResourceData, SResourceSize);
end;
Und benutze ihn so:
Code:
var
sBuffer: String;
begin
sBuffer := GetResourceAsString('TEST');
writeln(sBuffer);
readln;
Die Ausgabe auf der Konsole ist aber leider unvollständig bei Delphi XE:
Bei Delphi 2007 funktioniert es.
Ich hoffe auf hilfreiche Antworten.
MfG