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 1 von 2  1 2      
Benutzerbild von jamma-markus
jamma-markus

Registriert seit: 16. Okt 2004
Ort: Kempen
58 Beiträge
 
#1

AccessViolation-Error mit DLL

  Alt 15. Jan 2006, 23:03
hi,

ich bekomme jedes mal, wenn ich die prozedur "set_lang_values" aufrufe einen EAccessViolation-Error. die procedure hängt in einer dll.

Aufruf der Prozedur:
set_lang_values(language, mm_file, mm_exit, bt_add, bt_change, bt_del, bt_exit); Prozedur
Delphi-Quellcode:
procedure set_lang_values(
  language : TLanguage_values;
  mm_file, mm_exit : TMenuItem;
  bt_add, bt_change, bt_del, bt_exit : TBitBtn); stdcall;
begin
//Mainmenü
  mm_file.Caption := string(language[0,0]);
  mm_exit.Caption := string(language[0,1]);
//Buttons
  bt_add.Caption := string(language[1,0]);
  bt_change.Caption := string(language[1,1]);
  bt_del.Caption := string(language[1,2]);
  bt_exit.Caption := string(language[1,3]);
end;
language ist so deklariert
Delphi-Quellcode:
type
  TLanguage_values = array [0..5, 0..50] of PChar;

var
  language : TLanguage_values;
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

Re: AccessViolation-Error mit DLL

  Alt 15. Jan 2006, 23:13
Ich hoffe du verwendest Runtime-Packages!

Falls nein darfst Du keine Objekte TMenuItem und TBitBtn über die DLL-Schnittstelle übergeben da du dann 2 komplett getrennte Objektmodelle hast. TObject aus der Exe <> TObject aus der DLL.
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
 
#3

Re: AccessViolation-Error mit DLL

  Alt 16. Jan 2006, 07:02
Verzeiht mir bitte, wenn ich jetzt ganz großen Müll erzähle, aber ich hab noch folgenden Alternativ-Vorschlag: Übergib doch nur die Adressen der Objekte und hole dir dann in der Dll die Objekte zu den Adressen.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: AccessViolation-Error mit DLL

  Alt 16. Jan 2006, 07:55
hast du den Textabschnitt beachtet der im DLL-Projekt ganz oben steht wenn man ein neues Projekt anlegt? Wenn nicht, dann mal durchlesen und das was dort steht auch befolgen!
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

Re: AccessViolation-Error mit DLL

  Alt 16. Jan 2006, 08:34
Zitat von chaosben:
Verzeiht mir bitte, wenn ich jetzt ganz großen Müll erzähle, aber ich hab noch folgenden Alternativ-Vorschlag: Übergib doch nur die Adressen der Objekte und hole dir dann in der Dll die Objekte zu den Adressen.
Bringt nicht bzw. kommt auf gleiche raus. Wenn in der Schnittstelle TBitBtn steht wird nur die Referenz (Adresse) auf das Objekt übergeben. Also genau das gleiche als wenn Pointer dort stehen würde.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von jamma-markus
jamma-markus

Registriert seit: 16. Okt 2004
Ort: Kempen
58 Beiträge
 
#6

Re: AccessViolation-Error mit DLL

  Alt 16. Jan 2006, 12:21
Zitat von Bernhard Geyer:
Ich hoffe du verwendest Runtime-Packages!

Falls nein darfst Du keine Objekte TMenuItem und TBitBtn über die DLL-Schnittstelle übergeben da du dann 2 komplett getrennte Objektmodelle hast. TObject aus der Exe <> TObject aus der DLL.
sory, aber was sind Runtime-Packages
wie binde ich die ein/wie benutze ich die
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

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

Re: AccessViolation-Error mit DLL

  Alt 16. Jan 2006, 12:26
Zitat von Bernhard Geyer:
Bringt nicht bzw. kommt auf gleiche raus. Wenn in der Schnittstelle TBitBtn steht wird nur die Referenz (Adresse) auf das Objekt übergeben. Also genau das gleiche als wenn Pointer dort stehen würde.
Ich gehe davon aus, das es seine eigene DLL ist. Also könnte er doch die Funktion dahingehend ändern, das er Integer-Werte übergibt (also die Adressen der Objekte) und sie dann in der DLL wieder auflöst.
Natürlich ist das unschöne Programmierung ... sozusagen "on the edge" ... aber es ist ja nur ein Alternativ-Vorschlag.
Wenn es ich um "Windows-Fenster" handelt, könnte man auch mit dem Handle arbeiten.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#8

Re: AccessViolation-Error mit DLL

  Alt 16. Jan 2006, 12:31
Hallo,
Zitat von chaosben:
Ich gehe davon aus, das es seine eigene DLL ist. Also könnte er doch die Funktion dahingehend ändern, das er Integer-Werte übergibt (also die Adressen der Objekte) und sie dann in der DLL wieder auflöst.
Macht er doch. Ein Objekt ist nur ein Pointer. Ein Pointer ist nur ein integer.

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

Re: AccessViolation-Error mit DLL

  Alt 16. Jan 2006, 13:10
Zitat von chaosben:
Zitat von Bernhard Geyer:
Bringt nicht bzw. kommt auf gleiche raus. Wenn in der Schnittstelle TBitBtn steht wird nur die Referenz (Adresse) auf das Objekt übergeben. Also genau das gleiche als wenn Pointer dort stehen würde.
Ich gehe davon aus, das es seine eigene DLL ist. Also könnte er doch die Funktion dahingehend ändern, das er Integer-Werte übergibt (also die Adressen der Objekte) und sie dann in der DLL wieder auflöst.

Natürlich ist das unschöne Programmierung ... sozusagen "on the edge" ... aber es ist ja nur ein Alternativ-Vorschlag.
Gleiche Problem! TBitBtn von DLL <> TBitBtn von Exe

Zitat von jamma-markus:
sory, aber was sind Runtime-Packages
wie binde ich die ein/wie benutze ich die
Lese mal in der Delphi-Hilfe unter Packages nach.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#10

Re: AccessViolation-Error mit DLL

  Alt 16. Jan 2006, 19:24
Also wo liegt nun genau das Problem?

Bei den übergebenen PChars oder bei den Objekten?

Zu den PChars:
Delphi-Quellcode:
(* Anders als bei Strings müssen diese erst Speicher zugewiesen bekommen, wenn sie nicht aus dem Quelltext heraus mit Konstanten gleichgesetzt werden: *)
var
 P: PChar;
begin
 P := 'Hallo Welt!';
end;

(* wenn ich DLLs PChars übergeben hab oder in einer DLL Funktion ein variabler PChar zurück gegeben wurde, hab ich dafür erst Speicher reservieren müssen: *)
var
 P: PChar;
 S: String;//intern dürfen Strings benutzt werden //soweit ich weiß
begin
 S := DateToStr(Date);//ein Bsp, wo man nicht einfach P := PChar(DateToStr(Date)) schreiben kann
 GetMem(P, Length(S));
//oder obere Zeile und den String weglassen und direkt folgendes schreiben
// GetMem(P, 10);
 StrPCopy(P, S);
end;
Soviel zum Thema PChars, vlt liegts ja an etwas in die Richtung.

Zu den Pointergeschichten: Mir hat mal jemand gesagt, dass es egal sei, wenn man an DLLs TMenuItem s übergibt und so, so lange die Version der VCL übereinstimmt! (zu Programmierspracheübergreifenden Projekten kann ich da nicht sagen!)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:00 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