Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: FindResource Delphi XE Problem

  Alt 8. Mär 2012, 19:47
Zitat:
FindResource(hInstance, PAnsiChar(pSectionName), RT_RCDATA);
Hier brauchtst du unbedingt "PChar(pSectionName)" was ab Delphi 2009 dem PWideChar enspricht.


Zitat:
Delphi-Quellcode:
 ResourceData: PChar;
  SResourceSize: LongWord;
begin
  ResourceData := GetResources(pSectionName, SResourceSize);
  SetString(Result, ResourceData, SResourceSize);
Hier liegt der eigentliche Fehler. In Delphi 2007 war PChar = PAnsiChar, also 1 Byte pro Zeichen, womit SResourceSize gleich der Länge des Strings entsprach. Seit der Unicode-Umstellung ist PChar jedoch PWideChar, also 2 Byte pro Zeichen. Da ich davon ausgehe, dass sich die Ressource-Daten nicht von Delphi 2007 nach XE geändert haben, stehen in der Ressource immernoch ANSI-Zeichen, also 1 Byte pro Zeichen. Du lässt Delphi das aber als UNICODE-String interpretieren (PChar).
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.
  Mit Zitat antworten Zitat