![]() |
FindResource Delphi XE Problem
Guten Abend liebe Community
Ich habe ein Problem mit "FindResource" und Delphi XE. Bei Delphi 2007 funktioniert es noch ganz normal. Jedoch gibt es Problem mit Delphi XE und PWideChar, PChar und PAnsiChar. Mein Code sieht folgendermassen aus:
Code:
Ich bekomme folgenden Fehler:program Project2; {$APPTYPE CONSOLE} uses SysUtils, Windows; function GetResources(pSectionName: PChar; out ResourceSize: LongWord): Pointer; var ResourceLocation: HRSRC; ResourceHandle: HGLOBAL; begin ResourceLocation := FindResource(hInstance, PAnsiChar(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; begin try Writeln(GetResourceAsString('a')); Readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. ![]() ![]() Wenn ich allerdings PAnsiChar in PWideChar ändere, ist die Ausgabe: ![]() Könnte mir da jemand helfen damit das auch mit Delphi XE funktioniert? Ich bin über jede hilfreiche Antwort dankbar. Mit freundlichen Grüssen, Herbert Kuhn |
AW: FindResource Delphi XE Problem
Zitat:
Zitat:
Es sollte also ausreichen, aus "ResourceData: PChar" ein "ResourceData: PAnsiChar" zu machen. Der Compiler generiert dann für das SetString den richtigen Systemfunktionsaufruf, der einen PAnsiChar samt ANSI-Länge in einen Unicode-String umwandelt. |
AW: FindResource Delphi XE Problem
Tja, der Compiler sagt dir doch, was falsch ist und darauf sollte man auch hören.
Schau dir also die Parameterdefinitionen der Funktion an und sorge für passende Typen der übergebenen Variablen/Konstanten, oder nutze eine Funktion mit passenden Parametern. PChar = PWideChar (seit Delphi 2009) PAnsiChar und PWideChar kann man nicht casten, da nur die Zeigertypen gecastet, aber nicht die Daten konvertiert werden. Für eine Funktion, welche einen PAnsiChar haben will, brauchst du also einen PAnsiChar, welchen man sich über einen AnsiString besorgen kann. FindResource will (seit Unicode/Delphi 2009) einen PWideChar haben, also sollte man diesem auch einen PWideChar/PChar geben. FindResource > PChar (bis D2007 = PAnsiChar / ab D2009 = PWideChar) FindResourceA > PAnsiChar FindResourceW > PWideChar PS: Compiler-Meldungen kann man auch als Text kopieren. (entsprechende Einträge markieren und dann Strg+C) Bilder/Anhänge nächstes Mal bitte als Anhang an den Post anhängen. |
AW: FindResource Delphi XE Problem
Vielen Dank für eure hilfreichen Antworten. Das Problem konnte somit behoben werden. :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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