dll delete -> wäre das möglich ?
-
hi,
mir ist bekannt, dass speicher, den ich innerhalb einer dll (runtime) mit new reserviere auch nur innerhalb der dll mit delete wieder freigegeben werden darf.mal angenommen, ich erzeuge eine virtuelle löschfunktion und reservierfunktion innerhalb der dll und übergebe einen zeiger auf eine löschfunktion und reservierfunktion im hauptprogramm, wird der speicher theoretisch im hauptprogramm erstellt und gelöscht, oder immer noch in der dll ?
gruß
rml
-
der speicher wird da erzeugt wo die objekte erzeugt werden. in dem fall die .dll.
von wo aus du darauf zeigst ist unwichtig, der zeiger zeigt auf einen schon vorhandenen speicherbereich. der zeiger erzeugt keinen.
-
also ich habe eine array struktur in einer klasse im hauptprogramm. diese struktur muss in der grösse geändert werden und neu gefüllt werden.
also müsste ich einen zeiger auf diese struktur an die dll übergeben. dort wird die benötigte neue array struktur erzeugt und gefüllt.
diese neue struktur übergebe ich zurück an das hauptprogramm.
dort lösche ich die alte struktur, erzeuge eine gleich grosse struktur, wie die von der dll zurück gegebene, kopiere die daten von der dll struktur dort rein.
rufe das plugin neu auf, um die dll struktur wieder zu löschen.
boah, dass hört sich nicht gut an, besonders, wenn es sich um grössere datenmengen geht...
-
hi,
mir ist bekannt, dass speicher, den ich innerhalb einer dll (runtime) mit new reserviere auch nur innerhalb der dll mit delete wieder freigegeben werden darf.Wer sagt das ? Gute Sitte ist das schon aber, aber technische Notwendigkeit
nicht (immer).
-
naja, man findet diese aussage überall - abgesehen davon habe ich die erfahrung am eigenen leib machen müssen... mein programm stürzte erst dann nicht mehr ab, wenn ich delete innerhalb der dll aufgerufen habe....
daher kam mir die idee mit der virtuellen funktion und dem zeiger....
ich glaube die beschreibung, die ich zum ablauf abgegeben habe, ist sehr umständlich und vor allem zeitaufwändig. es muss doch möglich sein, einen im hauptprogramm abgelegten speicher von der ddl aus mit new zu erstellen , zu löschen und anders herum, da die dll ausschliesslich zum bearbeiten der strukturen da sind (die daten sollen auch im hauptprogramm abgelegt bleiben) und danach sofort wieder aus dem speicher gelöscht werden sollen....so dnach dem motto:
*strukur/array im Hauptprogramm
lade beliebige (kompatible)dll
übergib &struktur/array an dll
in dll: änder struktur/array in grösse und inhalt
entferne die dll wieder ausm speicher
weiternutzung im hauptprogramm....
-
Ob Speicher, der innerhalb einer dll mit new reserviert wurde, außerhalb mit delete freigegeben werden kann, hängt davon ab, ob msvcrt.dll verwendet wird (bei Visual C++). Wenn beide Parteien die dynamische Runtime verwenden, gibt's kein Problem.
Unter Unix geht es normalerweise auch. Wie es mit den anderen Compilern unter Windows ausschaut, weiß ich nicht.
-
ok, schade, da ich diese dll ja nicht als gegeben voraussetzen kann, werde ich wohl die umständliche variante wählen müssen.
dank euch!