Nein, am WideString kann es nicht liegen. WideStrings entsprechen dem BSTR Datentyp von
COM (der Speicher dafür wird auch über SysAllocString reserviert und nicht über den Delphi-internen MemoryManager) und können problemlos vom Marshaler verarbeitet werden. Wenn ich den Rückgabewert der Funktion von WideString auf PWideChar ändere funktioniert es. Das Problem liegt anscheinend wirklich daran, dass Delphi bei unterschiedlichen Typen die Parameter in unterschiedlicher Reihenfolge auf den Stack legt - und das bei gleicher Aufrufkonvention.
Das ist meiner Meinung nach ein Bug! Das Problem tritt übrigens unter Delphi 2006 Prof auf. Ich werd mal probieren ob es unter meinem Delphi 6 auch auftritt...
Gruß, Motzi
edit: grad getestet - unter Delphi 6 verhält es sich ganz genauso.