Zuerst mal solltest du nicht LoadLibrary benutzen, denn wenn "lzResDataFile" eine
DLL ist, wird deren DllMain-Routine ausgeführt, was unbeabsichtigte Folgen haben könnte!
Wenn man nur an den Ressourcen einer EXE/
DLL interessiert ist, und keinen Code davon aufrufen will, dann sollte man
immer LoadLibraryEx benutzen, mit dem Flag LOAD_LIBRARY_AS_DATAFILE:
hLib := LoadLibraryEx(PChar(FileName), 0, LOAD_LIBRARY_AS_DATAFILE);
Außerdem solltest du PChar für diese String-Casts benutzen, nicht PWideChar, damit der Code sowohl in älteren (
Ansi) als auch neueren (
Unicode) Versionen von Delphi läuft.
Wie prüfst du, ob das Ersetzen des Symbols geklappt hat? Öffnest du die modifizierte Datei mit einem Ressourceneditor, oder schaust du einfach nur im Explorer/Desktop nach, ob das Symbol sich ändert? Falls letzteres: Windows hat einen Icon-Cache, es könnte also sein, dass das Symbol in der Datei geändert wurde, aber Windows durch den Cache immer noch das alte anzeigt.