![]() |
Problem bei Resource und Unicode
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Button Click Event ist also:
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;
Code:
Für das auslesen benutze ich folgenden 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');
Code:
Und benutze ihn so:
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;
Code:
Die Ausgabe auf der Konsole ist aber leider unvollständig bei Delphi XE:
var
sBuffer: String; begin sBuffer := GetResourceAsString('TEST'); writeln(sBuffer); readln; Anhang 37458 Bei Delphi 2007 funktioniert es. Ich hoffe auf hilfreiche Antworten. MfG |
AW: Problem bei Resource und Unicode
Was kommt in der Ressource an.
So wie es aussieht berücksichtigst du nicht das String = Unicodestring ab D2009 ist und ein Char = 2 Byte ist. |
AW: Problem bei Resource und Unicode
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo
Danke für Deine Antwort. Ich habe nun beim Schreiben folgende Zeile geändert: WriteResData(ExtractFilePath(ParamStr(0)) + 'test2.exe', PWideChar(sBuffer), Length(sBuffer) * 2, 'TEST'); Also Length(sBuffer) * 2. Nun wird zwar das ganze Wort ausgegeben, allerdings noch mit anhängenden "?". Screenshot: Anhang 37459 Was meinst du genau mit "Was kommt in der Ressource an."? Also mit dem Resourcen Editor (Reshacker) sehe ich folgende Zeichen: Anhang 37461 Im Code-Tag:
Code:
Vielen Dank
000089A4 45 00 64 00 69 00 74 00 31 E•d•i•t•1
|
AW: Problem bei Resource und Unicode
nur weils mir aufgefallen ist als tipp (ohne auf die Lösung deines Problems einzugehen):
generell wäre statt
Delphi-Quellcode:
ein
Length(sBuffer) * 2
Delphi-Quellcode:
besser, damit vermeidest du ein "hardcoden" der charlänge und hast code evtl. auch nicht-unicode-compiler kompatibel.
Length(sBuffer) * SizeOf(Char)
|
AW: Problem bei Resource und Unicode
Und das ParamStr(0) kannst du dir auch sparen ;)
|
AW: Problem bei Resource und Unicode
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 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