Einzelnen Beitrag anzeigen

Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: C++-DLL --> Delphi - dynamischer struct-Array?

  Alt 20. Jun 2007, 14:34
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.
  Mit Zitat antworten Zitat