@Luckie
Danke für den Tip. Ich hatte irgendwie das mit dem TThread-Object durcheinander geworfen und meinenThread im
Unit-Kopf als Tthread-Object deklariert und dann mit BeginThread gestartet

Jetzt gehts wenn ich als function und mit dem Rückgabetyp Integer deklariere. Die Strings werden jetzt auch korrekt übergeben, meistens jedenfalls. Ich habe jetzt nämlich das problem, das bei sehr langen Dateinamen (zb mehrere lange Verzeichnisnamen und dann noch ein langer Dateiname) nicht alles ankommt. Nach einer gewissen Zahl an zeichen scheint der String bei langen Dateinamen einfach abgeschnitten zu werden. Das heisst von einem Dateinamen wie "C:\extrasuperlangerdateiname\miteinemnochlängeren Unterverzeichnis\undnochweiterenUnterverzeichnisse n\undnocheinUnterverzeichnis\unddannnocheinlangerD ateiname.doc"
kommen vielleicht nur die ersten 40 - 50 zeichen an (habs jetzt nicht genau nachgezählt).
Das mit dem Record was du vorgeschlagen hattest würde ich wenns geht lieber vermeiden, erstens weil ich das in deinem Tut nicht ganz verstanden habe(meinst du das mit dem InterLockedExchangeAdd??

) und zweitens weil es mit dem String ja eigentlich auch gut funktioniert bis auf lange Dateinamen. Gibt es eine Möglichkeit die Länge des übergebenen String-Pointers hochzusetzen? oder wo koönnte sonst das problem liegen?