Hallo an alle
DP´ler und guten Tag,
Also hab nochmal eine Frage zu dynamisch geladenen Funktionen aus einer
DLL. Muss dazu sagen, habe diese Funktionen alle schon statisch eingebunden und sie funktionierten einwandfrei. Jetzt bekomme ich bei einer Funktion immer einen Fehler ausgegeben.
Aber erstmal schnell die genauen Daten:
Delphi-Quellcode:
// Aus der Dokumentation der DLL (nur die verwendeten Funktionen aufgeführt)
{function MMC_COM_open(portnumber,baudrate:integer):integer;
stdcall external ExtLib;
function MMC_COM_close:integer;
stdcall external ExtLib; //
function MMC_sendCommand(pCmd:pChar):integer;
stdcall external ExtLib; //
function MST_moving:integer;
stdcall external ExtLib; //
function MMC_setDevice(newaxis:integer):integer;
stdcall external ExtLib; // }
// Typdeklaration für die aus der dynamisch eingebundenen MMC.DLL zu ladenen
// Funktionen.
type TMMC_COM_open =
function(portnumber,bautrate: integer):integer;
stdcall;
type TMMC_close =
function: integer;
stdcall;
type TMMC_sendCommand =
function(pCmd: pChar): integer;
stdcall;
type TMST_moving =
function: integer;
stdcall;
type TMMC_setDevice =
function(NewAxis: integer): integer;
stdcall;
// Variablendeklaration der aus der dynamisch eingebundenen MMC.DLL zu ladenen
// Funktionen
var MMC_COM_open: TMMC_COM_open;
MMC_close: TMMC_close;
MMC_sendCommand: TMMC_sendCommand;
MST_moving: TMST_moving;
MMC_setDevice: TMMC_setDevice;
// im Implementierungsteil
function TV_Tische.DLLFunktionen_laden: boolean;
begin
Protokoll.Protokolleingang('
Verschiebetisch', '
DLL-Fkt laden');
try
if DLL_Handle <> 0
then //es wird überprüft, ob die DLL vorhanden ist und dann ein Handle zugewiesen
begin
// Es wurde festgestellt, dass nicht alle Funktionen, die in der DLL vorhanden
// sind wirklich für die Umsetzung des Programmes benötigt werden. Deswegen
// werden hier nur die wirklich verwendeten Funktionen eingebunden, um auch die
// Resourcen für das Programm zu beschränken
@MMC_COM_open := GetProcAddress(DLL_Handle, '
MMC_COM_open');
@MMC_close := GetProcAddress(DLL_Handle, '
MMC_close');
@MMC_sendCommand := GetProcAddress(DLL_Handle, '
MMC_sendCommand');
@MST_moving := GetProcAddress(DLL_Handle, '
MST_moving');
@MMC_setDevice := GetProcAddress(DLL_Handle, '
MMC_setDevice');
result := true;
end
else
begin
Fehlermeldung(103);
result := false;
end
except
Fehlermeldung(104);
result := false;
end;
Protokoll.Protokollausgang('
Verschiebetisch', '
DLL-Fkt laden');
end;
destructor TV_Tische.Destroy;
begin
Bremsen(1);
MMC_close;
//<-- hier taucht ein Fehler auf in Adresse 0000000
Bewegungsueberwachung.free;
TischDLL.Free;
Protokoll.Protokollausgang('
Verschiebetisch', '
Destroy');
inherited Destroy;
end;
Beim Beenden der MainForm wird mir ein Fehler gemeldet, der in der MMC_close-Funktion auftritt. Allerdings kann ich mir nocht nicht erklären, woher dieser Fehler kommt, da sämtliche anderen Funktionen ohne Probleme ausgeführt werden. Die Verwendung der statischen Funktionen funktionierte ohne Probleme. Sieht jemand eventuell, was bei der Funktion falsch läuft?
Vielen Dank
BAMatze
2. Account Sero