Einzelnen Beitrag anzeigen

OttoFragt

Registriert seit: 18. Aug 2012
2 Beiträge
 
#1

Problem bei Resource und Unicode

  Alt 18. Aug 2012, 12:08
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:
output.png

Bei Delphi 2007 funktioniert es.

Ich hoffe auf hilfreiche Antworten.

MfG
  Mit Zitat antworten Zitat