![]() |
AccessViolation-Error mit DLL
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:
Delphi-Quellcode:
Prozedur
set_lang_values(language, mm_file, mm_exit, bt_add, bt_change, bt_del, bt_exit);
Delphi-Quellcode:
language ist so deklariert
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;
Delphi-Quellcode:
type
TLanguage_values = array [0..5, 0..50] of PChar; var language : TLanguage_values; |
Re: AccessViolation-Error mit DLL
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. |
Re: AccessViolation-Error mit DLL
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.
|
Re: AccessViolation-Error mit DLL
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!
|
Re: AccessViolation-Error mit DLL
Zitat:
|
Re: AccessViolation-Error mit DLL
Zitat:
wie binde ich die ein/wie benutze ich die :?: :?: :?: |
Re: AccessViolation-Error mit DLL
Zitat:
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. |
Re: AccessViolation-Error mit DLL
Hallo,
Zitat:
Gruß xaromz |
Re: AccessViolation-Error mit DLL
Zitat:
Zitat:
|
Re: AccessViolation-Error mit DLL
Also wo liegt nun genau das Problem?
Bei den übergebenen PChars oder bei den Objekten? Zu den PChars:
Delphi-Quellcode:
Soviel zum Thema PChars, vlt liegts ja an etwas in die Richtung.
(* 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; 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!) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz