Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: aus c-Programm eine Delphi-dll aufrufen

  Alt 18. Jan 2007, 08:53
Zitat von Muetze1:
// Result vom Typ PChar!
Result := 'hallo ballo';
Result := PChar('hallo ballo');[/delphi]
Und hier verliert der String seine Gültigkeit mit verlassen der Procedure, da die Variable aus einer Adresse besteht (da Pointer), welche ihre Gültigkeit behält und im Register übergeben wird. Nur halt an der Adresse steht nix mehr.
Ich bin mir nicht sicher, aber könntes es auch so sein, dass gerade bei solchen Festlegungen, die Zeichenkette ('hallo hallo') im Datensegment (oder im Codesegment; falls man überhaupt noch von Segmenten sprechen kann; auf jeden Fall nicht Stack) der DLL liegt. Und dies ist solange gültig, wie die DLL im Speicher liegt. Den Zeiger, den du mit PChar('hallo hallo') erstellst, zeigt also irgendwo direkt in den Code der DLL, wo die Zeichenkette liegt. Und bis freelibrary ist dieser gültig.

Anders wäre der Fall, wenn man eine Variable übergebn will (z.B. vom Stack), da müsste man in der DLL mit getmem/stralloc arbeiten und im C dann wieder "free"-n.


Edit: Oi, hier gabs ja schon eine Seite zwei. Den letzten Eintrag @Muetze hatt ich noch nicht gelesen. Aber genau der, trifft ja auf die Fragestellung zu.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat