Ein paar Dinge.
Delphi-Quellcode:
Drives: array [0 .. 128] of Widechar;
pDrive: PChar;
Und dann machst du das:
pDrive := Drives
Du weißt einem PChar ein Array vom Typ WideChar zu. Keine Ahnung, ob das so in Ordnung ist. Kommt mir auf den ersten Blick komisch vor.
FileInfo: SHFILEINFO;
Würde ich vor der ersten Verwendung mit
ZeroMemory "ausnullen". Schlägt nämlich
SHGetFileInfo fehl, du prüfst es nicht, dann steht in
FileInfo Schrott drin, mit dem du dann weiter arbeitest.
Wo wird die Stringliste wieder freigegeben? Besser: Der Aufrufer erzeugt die StringListe, übergibt sie als Parameter und gibt sie wieder frei. Dann kann man sie auch sauber in einem Ressourcenschutzblock verpacken. Erstellen und Freigeben in einer Routine macht es auch übersichtlicher.