Die VCL ist an einigen Stellen in Bezug auf die WinAPI-Anbindung SEHR unsauber programmiert, so dass nicht jede Fehlerbedingung auch wirklich resettet wird. So verbleiben oftmals viele Fehlersituationen in GetLastError und werden bei einem allgemeinen Aufruf dann "abgefangen". In einem solchen Fall: Vor dem eigenen WinAPI-Block einfach mit
SetLastError(0); einen initialisierten Ausgangszustand herstellen, dann geht's

Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.