![]() |
Funktionen werden nicht mehr aus der DLL geladen
Hallo und guten Morgen an alle DP´ler,
Ist vieleicht gerade einfach noch zu früh am Morgen, aber irgendwie funktionieren folgende Proceduren nicht mehr wirklich, seit ich diese aus meinem Gesamtprojekt in ein kleineres und überschaubareres Projekt kopiert habe. Hier erstmal die Proceduren:
Delphi-Quellcode:
Das Handle wird Problemlos gefunden und hat auch einen Wert, allerdings läd er (obwohl es auch die richtige DLL ist und am richtigen Ort liegt) die Funktionien im meinem kleineren Projekt nicht mehr. Im Gesamtprojekt hingegen funktioniert alles wunderbar. Grübel da jetzt gerade schon eine Stunde rum und sehe einfach keinen Grund für ein solches Verhalten.
function TP_Tisch.DLLHandle_zuweisen: boolean;
begin //Protokoll.Protokolleingang('Piezotisch', 'DLLHandle-Fkt'); doFehlerevent(200); try TischDLL := TDLL_Datei.create('E816_DLL.dll'); try result := TischDLL.Vorhanden; case result of true: DLL_Handle := TischDLL.Handle; false: begin doFehlerevent(101); DLL_Handle := 0; end; end; except doFehlerevent(201); result := false; end; finally // Beenden der Klasse TischDLL.Free; end; //Protokoll.Protokollausgang('Piezotisch', 'DLLHandle-Fkt'); end; function TP_Tisch.DLLFunktionen_laden: boolean; begin //Protokoll.Protokolleingang('Piezotisch', 'DLL-Fkt laden'); E816_ConnectRS232 := GetProcAddress(DLL_Handle, 'E816_ConnectRS232'); E816_CloseConnection := GetProcAddress(DLL_Handle, 'E816_CloseConnection'); E816_IsConnected := GetProcAddress(DLL_Handle, 'E816_IsConnected'); E816_MOV := GetProcAddress(DLL_Handle, 'E816_MOV'); E816_MVR := GetProcAddress(DLL_Handle, 'E816_MVR'); E816_SVO := GetProcAddress(DLL_Handle, 'E816_SVO'); E816_qPOS := GetProcAddress(DLL_Handle, 'E816_qPOS'); result := (DLL_Handle <> 0) and assigned(E816_ConnectRS232) and assigned(E816_CloseConnection) and assigned(E816_IsConnected) and assigned(E816_MOV) and assigned(E816_SVO); if not result then doFehlerevent(203); //Protokoll.Protokollausgang('Piezotisch', 'DLL-Fkt laden'); end; Hoffe jemand kann mir helfen BAMatze [Edit] Die GetProcAddressen liefern alle nil zurück, was eigentlich nicht sein kann, da es die richtige Datei ist. Werde sie jetzt auch mal austauschen [/Edit] |
Re: Funktionen werden nicht mehr aus der DLL geladen
Wird die Dll möglicherweise im Destruktor von TDll_Datei wieder entladen? Du rufst ja am Ende der Methode DLLHandle_zuweisen TischDll.Free auf.
|
Re: Funktionen werden nicht mehr aus der DLL geladen
Also ich glaube eigentlich nicht, bin mir aber nicht sicher, deswegen hier mal die Klasse:
Delphi-Quellcode:
Also wie man sieht, lade ich dort die DLL, aber eigentlich gebe ich sie hier nicht frei. Könnte maximal sein, dass das schließen der Klasse dies macht, wobei das ganze so im großen Projekt wie gesagt alles ohne Probleme so funktioniert.
Type TDLL_Datei = class
private bDLL_vorhanden: boolean; sDLLName: string; hDLLHandle: THandle; function DLL_vorhanden: boolean; public constructor create(const sDateiName: string); reintroduce; destructor Destroy; override; property Vorhanden: boolean read bDLL_vorhanden; property Handle: THandle read hDLLHandle; end; constructor TDLL_Datei.Create(const sDateiName: string); begin inherited create; sDLLName := sDateiName; bDLL_vorhanden := DLL_vorhanden; end; function TDLL_Datei.DLL_vorhanden: boolean; var DLL_Handle: THandle; begin try DLL_Handle:=LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+ 'DLL\'+sDLLName)); if DLL_Handle <> 0 then begin hDLLHandle := DLL_Handle; result := true; end else result := False except result := false; end; end; destructor TDLL_Datei.Destroy; begin inherited Destroy; end; |
Re: Funktionen werden nicht mehr aus der DLL geladen
Dann ermittle doch mal nach jedem Aufruf von GetProcAddress mit GetLastError ob Windows irgendwas dazu zu sagen hat.
|
Re: Funktionen werden nicht mehr aus der DLL geladen
erste Aussage gestrichen.
Also habe die gleiche Nachricht, wenn ich GetLastError bei dem funktionierenden Projekt an gleicher Stelle verwende. Also muss die Nachricht, dass die Datei vom System nicht gefunden wurde, nicht zwingend was mit dem Problem zu tun haben. [Edit] Das Handle ist auch beim laden der Funktionen das gleiche, welches beim Laden der DLL erstellt wird [/Edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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