Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi DLL macht probleme (https://www.delphipraxis.net/135673-dll-macht-probleme.html)

youuu 15. Jun 2009 21:33


DLL macht probleme
 
Hi,

Ich habe eine Funktion in einer DLL

Delphi-Quellcode:
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;
wird im Hauptprogramm so aufgerufen:

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.

Apollonius 15. Jun 2009 21:40

Re: DLL macht probleme
 
ShareMem eingebunden? Vergiss nicht, du arbeitest hier modulübergreifend mit Strings (Query.SQL.Text).

youuu 15. Jun 2009 21:41

Re: DLL macht probleme
 
Ja ist eingebunden

DLL
Delphi-Quellcode:
uses
  ShareMem,
  SysUtils,
.
.
.
Anwendung
Delphi-Quellcode:
uses
  ShareMem,
  Forms,
.
.
.

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
.
.
.
  Application.Run;
end.

sx2008 16. Jun 2009 06:06

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 21:22 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