Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fehler nach freigeben von DLL (https://www.delphipraxis.net/90751-fehler-nach-freigeben-von-dll.html)

gsh 30. Apr 2007 08:25

Re: Fehler nach freigeben von DLL
 
Zitat:

Zitat von hoika
Ein ReAlloc erzeugt unter Umständen einen neuen Pointer
und der alte wird nicht mehr verwendet.
Vielleicht solltest du bei der Übergabe ein Pointer auf einen PChar
nehmen statt das PChar selber.

Ich übergebe ein Array von PChar als Paremter und die Anwendung muss dann die Daten aus dem Array auslesen können. (was es auch kann) also kann es ja gar nicht sein das ein neuer pointer erstellet wird da ja die Exe mit dem "alten" immernoch auf die daten zugreifen kann

hoika 30. Apr 2007 09:29

Re: Fehler nach freigeben von DLL
 
Ja,

das ist eben verwunderlich.
Probier doch mal das SetLength mit "grossem Wert"
mal aus, dann hast du zumindestens ne Notlösung.


Heiko

gsh 30. Apr 2007 09:50

Re: Fehler nach freigeben von DLL
 
ja mit dieser lösung funktioniert es zwar ... aber damit geb ich mich nicht zufrieden ...

ich hab jetzt außerdem endeckt des es egal ist ob ich die DLL freigebe und wieder lade und wieder freigeben ...

Das Programm bringt nur den Fehler wenn:
-In der DLL die Größe (mit SetLength) vom DatenArray verändert wird.
-Die Dll irgendwann mal freigegeben wird.
-Das Programm beendet wird (erst wenn der Ausführungspunkt hinter dem Appliacation.Run; ist tritt der Fehler auf)

Wenn eins davon fehlt dann tritt der Fehler nicht auf

:wall: :wall: :wall:

hoika 30. Apr 2007 09:55

Re: Fehler nach freigeben von DLL
 
Hallo,

was passiert, wenn du nach Benutzung der Daten
ein SetLength(0) machst, also die Sache zurücksetzt ?


Heiko

gsh 30. Apr 2007 10:05

Re: Fehler nach freigeben von DLL
 
Cool jetzt kommt der Fehler nicht mehr :-D

So jetzt ist nur noch die Frage warum
Kann es daran liegen?:
Delphi-Quellcode:
  MySQL_myRow := mysql_fetch_row(MySQL_myRes);
  SetLength(DataArray^, mysql_num_fields(MySQL_myRes));
  for I := 0 to Length(DataArray^)-1 do
  begin
    DataArray^[I] := MySQL_myRow[I]; //<-- hier
  end;
//edit: aja des ist der Code in der DLL

hoika 30. Apr 2007 12:14

Re: Fehler nach freigeben von DLL
 
Hallo,

nein *hoff* ;)

Hast du den Coe mal mit memproof geprüft ?
Es kann sein, dass das SetLength(0) ein mem leak erzeugt.

Das SetLength in der DLL biegt bestimmt den Zeiger um (ReAlloc),
das SetLength(0) sorgt dafür, dass ein Free nichts mehr machen muss.

Ansonsten: Problem #12345 gelöst, weiter zu Problem #12346 ... ;)


Heiko

gsh 30. Apr 2007 12:24

Re: Fehler nach freigeben von DLL
 
Zitat:

Zitat von hoika
Hast du den Coe mal mit memproof geprüft ?
Es kann sein, dass das SetLength(0) ein mem leak erzeugt.

nein aber mit ReportMemoryLeaksOnShutdown:=true; und der meckert a mal nicht


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:20 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz