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.