AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Fehler nach freigeben von DLL
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler nach freigeben von DLL

Ein Thema von gsh · begonnen am 23. Apr 2007 · letzter Beitrag vom 30. Apr 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: Fehler nach freigeben von DLL

  Alt 26. Apr 2007, 17:27
Zitat von gsh:
Ich weiß das man keine Strings verwenden sollte. Ich verwende auch ganz sicher keiner. hab sogar extra nochmal nachgeschaut
Bau trotzdem den sharemem ein. Es schadet ja nicht.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#12

Re: Fehler nach freigeben von DLL

  Alt 26. Apr 2007, 17:40
nein weil ich dann nur noch delphi dlls unterstützen kann
ich will aber in dieser hinsicht unabhängig bleiben
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: Fehler nach freigeben von DLL

  Alt 26. Apr 2007, 20:38
Hallo,

wenn du ShortString verwendest,
geht es auch ohne sharemem.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#14

Re: Fehler nach freigeben von DLL

  Alt 26. Apr 2007, 21:42
ich verwende nur PChar
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#15

Re: Fehler nach freigeben von DLL

  Alt 27. Apr 2007, 19:02
*push*
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#16

Re: Fehler nach freigeben von DLL

  Alt 28. Apr 2007, 12:24
Ich hab was neues heraus gefunden.
Durch // und viel testen

jetzt bin ich draufgekommen das in der Datenbank.dll eine Zeile drinnen ist wenn ich sie weg tuhe (mit //) dann gibt es beim beenden keinen fehler. und zwar:
SetLength(DataArray^, mysql_num_fields(MySQL_myRes)); so jetzt hab ich des auch mit
SetLength(DataArray^, 1); getestet das ich mysql als fehler ausschließen kann und siehe da an dieser Zeile scheitert es.

ABER mein Problem ist die Frage warum, denn:
-Es wird an dieser Stelle kein Fehler ausgelöst
-SetLength(DataArray^, 0); funktioniert

DatenArray ist vom Typ PDataArray.
Delphi-Quellcode:
PDataArray = ^TDataArray;
  TDataArray = array of PChar;
Dieses Array ist in der Exe vorhanden und wird der DLL als Parameter übergeben

Die Daten werden RICHTIG an die Anwendung geschickt. Aber beim beenden kommt dann der Fehler
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#17

Re: Fehler nach freigeben von DLL

  Alt 29. Apr 2007, 18:26
*push*
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#18

Re: Fehler nach freigeben von DLL

  Alt 30. Apr 2007, 08:24
Hallo,

Ein SetLength erzeugt u.U. einen neuen Pointer (ReAlloc),
wahrscheinlich ist der Pointer im Daten-Segment der Dll
(?? lange her, das mit Dll bei mir).

Warum machst du das SetLength nicht vor dem DLL-Aufruf ?
Falls die Länge nicht bekannt ist, nimmt halt ne "grosse" Zahl.

Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#19

Re: Fehler nach freigeben von DLL

  Alt 30. Apr 2007, 09:12
Zitat von hoika:
Ein SetLength erzeugt u.U. einen neuen Pointer (ReAlloc),
wahrscheinlich ist der Pointer im Daten-Segment der Dll
(?? lange her, das mit Dll bei mir).
Der Pointer wird von der exe in die dll übergeben und die größe vom Array wird ja richtig gesetezt. Nur das Programm stürtzt aber nach dem freigeben der DLL ab.
Ich versteh einfach nicht wieso Da gibt es ja eigentlich keinen Zusammenhang oder?

Zitat von hoika:
Warum machst du das SetLength nicht vor dem DLL-Aufruf ?
Falls die Länge nicht bekannt ist, nimmt halt ne "grosse" Zahl.
nein ist nicht bekannt.
eine große zahl nehmen ... ganz sicher nicht. den diese Anwendung soll schnell laufen und das ist eine überhaupt nicht saubere lösung
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#20

Re: Fehler nach freigeben von DLL

  Alt 30. Apr 2007, 09:19
Hallo,

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.

Der Zusammenhang:
Tja, Dlls.
Mache mal zum Test ein SetLength vor DLL-Aufruf
mit einem grösseren Werte also in der DLL gemacht wird.
Dann verringert das DLL-SetLength den Speicher nur,
ReAlloc sollte nicht aufgerufen werden.


Zu "grosser Wert".
In der DLL muss eh Speicher angefordert werden,
wei viel hängt wovon ab ?
Das man einer Funktion ein PChar + dessen Grösse übergeben muss
ist doch nichts angewöhnliches.
Wenn ich z.B. eine API-Funktion für Pfade benutzen will,
nehme ich MAX_PATH als Grösse des PChar,
obwohl ich vielleicht kleiner Pfade zurückbekomme.


Heiko
PS:
MS (jaja, genau die) hatten mal in einer alten Word (2.0 für Dos)
auch so nen ReAlloc-Fehler drin, der "ab- und zu" zum Absturz
des Programms geführt hatte.
Das stand mal in nem C-Buch bei ReAlloc drin.
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 Uhr.
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