![]() |
Ungewöhnliche Zugriffsverletzung bei Verwendung von DLL
Hi,
ich habe mir gerade eine DLL geschrieben, die mir ein Interface implementieren soll. Ein wenig Code dazu:
Delphi-Quellcode:
library CXClassLib;
uses Windows, CXClass, CXInterfaces in '..\DelphiLib\Contrib\CXInterfaces.pas', CXTypes in '..\DelphiLib\Contrib\CXTypes.pas'; {$R *.res} type TCXClasseDLL = class(TInterfacedObject, ICXClassDLL) private fClass: TCXClass; public constructor Create; {...} end; constructor TCXClassDLL.Create; begin inherited; // Instanz der Klasse erzeugen fClass := TCXClass.Create; end; procedure TCXClassDLL.PrepareApplication({...}) begin {...} end; {...} function InitClass: ICXClassDLL; stdcall; begin Result := TCXClassDLL.Create; end; exports InitClass; begin end.
Delphi-Quellcode:
Soweit so gut. Wenn ich nun aber in meiner Anwendung, die die DLL verwenden soll folgendes mache:
type
ICXClassDLL = interface ['{2076EEAD-2CD2-4BD0-A87C-6F0341C18C5F}'] procedure PrepareApplication({...}); stdcall; {...} end;
Delphi-Quellcode:
Bekomme ich direkt nach dem Aufruf der DLL-Funktion eine AccessViolation. Über den Debugger weiß ich aber, dass er in die DLL springt und dort auch die Instanz erzeugt wird. Jedoch gibt es keinen Aufruf an dem der Debugger die Exception schmeißt, sondern einfach am Ende von InitClass.
function InitClass: ICXClassDLL; external 'CXClassLib.dll';
{...} procedure TfrmMain.FormCreate(Sender: TObject); begin // Interface holen fClassInt := InitClass; // Vorbereiten fClassInt.PrepareApplication({...}); end; Im Aufrufstack erscheint als mehr oder weniger letzter Eintrag ntdll.RtlConvertUlongToLargeInteger. Keine Ahnung, wo das her kommen soll. Hat jemand eine Idee, wo das Problem liegt? Chris |
Re: Ungewöhnliche Zugriffsverletzung bei Verwendung von DLL
Hallo!
Wurde die InitClass-Deklaration auch im aufrufenden Projekt mit stdcall versehen? Cu, Udontknow |
Re: Ungewöhnliche Zugriffsverletzung bei Verwendung von DLL
Hi,
nein. Das war's. So einfach war die Lösung. *g* Danke dir, Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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