Es ist immer wieder erschreckend wie wenig Ahnung die Leute haben (heute habe ich Lust zum Lamentieren).
"array of" ist Delphi-spezifisch. Ein new von C++ aus erzeugt kein "array of". Das
API der
DLL ist daher unbrauchbar.
Das von new erzeugte Objekt hat keine Laengeninformation, die Delphi zugreifen koennte.
Die uebliche Loesung ist das man erst per
API-Funktion fragt wie viele Elemente denn kommen und dann einen Puffer dieser Groesse bereitstellt (hier von Delphi aus) und ihn dann ausfuellen laesst. SetupDiGetDeviceInterfaceDetail ist z. B. so eine Funktion bei Windows.
Will man in einer
DLL dynamisch alloziierte Dinge zurueckliefern, so muss man immer eine Dealloziierungsfunktion bereitstellen. Es arbeiten ueblicherweise zwei Memorymanager. Einer im Hauptprogramm und einer in der
DLL. Gibt man speicher vom einen im anderen frei, so sind schnell beide Memorypools korrupt und das Programm stuerzt ab. Man kann natuerlich mit einer
win32-funktion alloziieren und freigeben, aber das ist meist ineffizient.