Seite 2 von 2

Verfasst: 29.01.2006 22:07
von ts-soft
Globale Variablen in der DLL werden beim entladen der DLL freigegeben. Wenn Du also einen erhaltenen String nicht einer neuen Variable zuordnest, bevor Du die DLL entlädst, ist der Pointer ungültig.

Verfasst: 30.01.2006 01:48
von Toshy
remi_meier hat geschrieben:Was meinst du, wieso du Rückgabestrings immer als Global definieren musst?
Das verstehe ich jetzt nicht, also man kann doch laut PB-Hilfe problemlos einer Procedure einen String als Rückgabewert übergeben.
procedure.s test()
procedurereturn testvar

Wenn man aber von eine Procedure einen String zurück bekommen kann, warum nicht auch von einer DLL? soweit ich weiß müßte das gehen. Testen kann ich aber frühsten morgen oder übermorgen.

Und auf das allocieren und freigeben von speicher müßte auch "DLLübergreifend" gehen.
MRK-Soft hat mal eine TCP.dll erstellt (MRK hat glaube ich auch die easydb.dll erstellt /galaxy) und dort kommt man einen speicherbereich erstellen, den übergeben und mußte nichts mehr löschen, weil die dll das tat. oder umgekehrt.
Da eine Dll wohl wirklich wie ein "eigenes programm" arbeitet, aber den selben speicher des hauptprogrammes teilt, sollte das doch wirklich möglich sein. besonders wenn für dll und hauptprogramm Purebasic genommen wird.

heute komme ich da nicht mehr zum testen. versuche es aber morgen mal. Könnte mir höchstens Vorstellen, das PB die Speichervergabe (MEmory, Variablen, Strukturen) intern verwaltet und das nicht abhängig zum Speicherbreich macht, nicht direkt. dann würde es natürlich Probleme geben. Ich habe da aktuell "leicht ähnliches Problem" mit Strukturen.
könnte von Grunde her das selbe selbe sein.

Aber das bekommen wir bestimmt noch raus :-)
Bis später.

Verfasst: 30.01.2006 17:46
von Konne
Also das mit dem globalen String Rückgabewert hab ich immer gedacht das müsse so sein weil sonst am Ende der Procedure der String gefreet wird und es dann doof ist. Naunja ddlls sind komisch. AAber ich liebe sie trotzdem.