AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

AccessViolation-Error mit DLL

Ein Thema von jamma-markus · begonnen am 15. Jan 2006 · letzter Beitrag vom 17. Jan 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: AccessViolation-Error mit DLL

  Alt 16. Jan 2006, 18:29
es ist nicht egal, auch nicht wenn DLL und Hauptprogramm die gleichen Objecte der gleichen Version nutzen. Wenn das ganze so gemacht wird muss mindestens noch die ShareMem verwendet werden. Denn wenn in der DLL die Caption aus dem Hauptprogramm geändert wird so weiß der Speichermananger aus dem Hauptprogramm nix und der Speichermanager aus der DLL weiß auch nicht woher der speicher kommt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#12

Re: AccessViolation-Error mit DLL

  Alt 17. Jan 2006, 06:35
So, jetzt habt ihr mich so weit ("auf die Palme") gebracht, das ich ne Demo geschrieben habe. Und ... wer hätte das gedacht ... es geht (via Pointer).
Und wer es nicht glaubt, der sauge sich bitte den Anhang.

Natürlich funktioniert diese Vorgehensweise nur ganz sauber, wenn man für die DLL und das Programm den gleichen Compiler und die gleichen Units verwendet.

Und noch ein Wort zu Objekten und Pointern. Eine Objektreferenz ist ungleich der Adresse im Speicher. Das was Integer(Objekt) liefert ist nur eine ID, die innerhalb der VCL-Umgebung eines bestimmten Programms gültig ist. Somit kann ich nicht diese ID an eine DLL übergeben, da diese ja in einer anderen Umgebung läuft. Dagegen ist die Adresse des Objektes im Speicher eindeutig.
Angehängte Dateien
Dateityp: zip bitbtnassassin_164.zip (447,1 KB, 10x aufgerufen)
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: AccessViolation-Error mit DLL

  Alt 17. Jan 2006, 07:24
Zitat von chaosben:
So, jetzt habt ihr mich so weit ("auf die Palme") gebracht, das ich ne Demo geschrieben habe. Und ... wer hätte das gedacht ... es geht (via Pointer).
Und wer es nicht glaubt, der sauge sich bitte den Anhang.

Natürlich funktioniert diese Vorgehensweise nur ganz sauber, wenn man für die DLL und das Programm den gleichen Compiler und die gleichen Units verwendet.
Das geht vieleicht, aber ist es sinnvoll bei einer "normalen" DLL den Compiler und die Version der DLL's vorzuschreiben. Dann kann man ja gleich Packages nehmen.
Auch gehen in diesem Fall nicht alle Objekte korrekt in 'ner DLL verwenden.

Kannst Du mal dein Programm so erweitern das eine aus der DLL erzeugtes TFont-Objekt in der Exe einem Button zugewiesen wird. Meine Versuche nach deinem Schema scheitern immer an einem Absturz.

Zitat von chaosben:
Und noch ein Wort zu Objekten und Pointern. Eine Objektreferenz ist ungleich der Adresse im Speicher. Das was Integer(Objekt) liefert ist nur eine ID, die innerhalb der VCL-Umgebung eines bestimmten Programms gültig ist. Somit kann ich nicht diese ID an eine DLL übergeben, da diese ja in einer anderen Umgebung läuft. Dagegen ist die Adresse des Objektes im Speicher eindeutig.
OK. Habe ich auch nicht so im Details so gewußt. Aber lößt das auch unser Problem komplett (siehe TFont)?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#14

Re: AccessViolation-Error mit DLL

  Alt 17. Jan 2006, 09:00
Naja ... grundsätzlich kann man mit meinem Vorschlag die eigentliche Frage dieses Threads beantworten (Captions für BitBtns setzen).
Natürlich kann ich mit dieser Methode nicht alles machen. Zum Beispiel kann ich dem Font-Objekt des Buttons keinen Namen zuweisen, da der Speicherbereich des Strings, in dem der neue Name steht, ja gleich wieder mit der DLL freigegeben wird. Solche Zuweisungen funktionieren nur, wenn sich das Objekt mittels einer Setter-Routine den Inhalt schnappt und selbst speichert. (z.B. Caption).

Nun noch ein Gedanke betreffs der Lokalisierung, die ja der Ausgangspunkt dieser Diskussion war. Ich halte es für ungebräuchlich, die Zuweisung der Texte von der Sprach-DLL erledigen zu lassen. Eher halte ich einen Zugriff auf die Resourcen der DLL für sinnvoll, um aus diesen die gewünschten Texte zu lesen. Noch besser ist aber imho die Idee, die Lokaliesierungsdaten in einer XML-Struktur zu hinterlegen. Falls jetzt das Argument kommt: "Das kann ja dann jeder ändern" ... will ich folgendes behaupten: Wer da was ändert und nicht mehr mit dem Programm klarkommt ist selber schuld. Wer aber das Programm in eine andere Sprache übersetzen will, dem wird es durch dieses Vorgehen sehr leicht gemacht, was dazu führen sollte, das das Programm noch bekannter wird.

Sorry, falls ohne Absicht der Oberlehrer zu sehr durchgekommen ist.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 04:11 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