![]() |
DLL macht probleme
Hi,
Ich habe eine Funktion in einer DLL
Delphi-Quellcode:
wird im Hauptprogramm so aufgerufen:
Function company_exist(Query: TZQuery; DB: PChar): Boolean; stdcall;
begin Query.SQL.Text:='SHOW TABLES'; Query.Open; result := false; while not (Query.EOF or result) do begin result := AnsiLowerCase(Query.Fields[0].AsString) = AnsiLowerCase(DB); Query.Next; end; Query.Close; end;
Delphi-Quellcode:
if company_exist(QueryLogin, PChar(DB)) then
Funktioniert auch alles soweit, jedoch wenn ich meine Anwendung beende bekomm ich 2 Fehler: 1.Exception der Klasse EAccessViolation .... Zugriffsverletzung bei Adresse ... in Modul uxtheme.dll 2.Exception der Klasse EAccessViolation .... Zugriffsverletzung bei Adresse ... in Modul libmysql.dll Wenn ich jedoch die gleiche Funktion im Programm ausführe, funktioniert es ohne jegliche Fehler. |
Re: DLL macht probleme
ShareMem eingebunden? Vergiss nicht, du arbeitest hier modulübergreifend mit Strings (Query.SQL.Text).
|
Re: DLL macht probleme
Ja ist eingebunden
DLL
Delphi-Quellcode:
Anwendung
uses
ShareMem, SysUtils, . . .
Delphi-Quellcode:
uses
ShareMem, Forms, . . . {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; . . . Application.Run; end. |
Re: DLL macht probleme
Normale DLLs sind nicht wirklich geeignet, um Objekte zu übergeben.
Der Code der Klasse TZQuery existiert zweimal: Zur Anwendung gelinkt und nochmals in der DLL. Somit lässt sich nur Code, der die VCL nicht benötigt sinnvoll in DLLs auslagern. (z.B. Prüfsummenberechnung, Verschlüsselung, Matheoperationen, Statistische Funktionen,...) Code, der Klassen aus der VCL benötigt, macht innerhalb einer DLL meistens Probleme. Denn plötzlich existieren globale Variablen der VCL zweimal; in der Anwendung und in der DLL. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 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