In einer DLL befindet sich folgende function:
function GetVersionNr:Integer
begin
GetVersionNr := 2;
end;
Die Funktion wird wie folgt aufgerufen:
procedure TFormMain.Button1Click(Sender: TObject);
var
Handle: THandle;
Ausdrucken:TAusdrucken;
Wert:Integer;
begin
Handle := LoadLibrary('HNPDruck.DLL');
if Handle <> 0 then
begin
Try
@Ausdrucken := GetProcAddress(Handle, 'GetVersionNr');
if @Ausdrucken <> nil then
Wert := Ausdrucken;
FreeLibrary(Handle);
except
on E: Exception do ShowMessage(E.Message);
end;
end;
end;
Der Aufruf der Funktion liefert den korrekten Wert.
Wenn das aufrufende Programm allerdings beendet wird, tritt ein
Run Time Error auf.
Die DLL ist in Delphi 2.0 geschrieben !!! Der Grund dafür ist die
nicht vorhandene Kompatiblität von Quickreport1 zu neueren Versionen
(Oder gibts dafür eine andere Lösung). Deshalb wurden die teilweise
sehr aufwendigen QRForms in eine DLL gepackt und diese DLL in
Delphi 2.0 compiliert.
Der Aufruf der DLL Funktionen hat jahrelang funktioniert. Es hat mit allen
Windows Versionen funktioniert.
Nun wird das aufrufende Programm mit Delphi6 compiliert. Nun tritt der
Runtime Error auf.
In allen Units steht Sharemem als erste Unit. Es gibt noch weitere
Probleme mit der DLL, diese hier aufgeführte Funktion ist jedoch die
einfachste.
Die DLL statisch zu benutzen bringt keine Besserung.
Wer weiß Rat ?
function GetVersionNr:Integer
begin
GetVersionNr := 2;
end;
Die Funktion wird wie folgt aufgerufen:
procedure TFormMain.Button1Click(Sender: TObject);
var
Handle: THandle;
Ausdrucken:TAusdrucken;
Wert:Integer;
begin
Handle := LoadLibrary('HNPDruck.DLL');
if Handle <> 0 then
begin
Try
@Ausdrucken := GetProcAddress(Handle, 'GetVersionNr');
if @Ausdrucken <> nil then
Wert := Ausdrucken;
FreeLibrary(Handle);
except
on E: Exception do ShowMessage(E.Message);
end;
end;
end;
Der Aufruf der Funktion liefert den korrekten Wert.
Wenn das aufrufende Programm allerdings beendet wird, tritt ein
Run Time Error auf.
Die DLL ist in Delphi 2.0 geschrieben !!! Der Grund dafür ist die
nicht vorhandene Kompatiblität von Quickreport1 zu neueren Versionen
(Oder gibts dafür eine andere Lösung). Deshalb wurden die teilweise
sehr aufwendigen QRForms in eine DLL gepackt und diese DLL in
Delphi 2.0 compiliert.
Der Aufruf der DLL Funktionen hat jahrelang funktioniert. Es hat mit allen
Windows Versionen funktioniert.
Nun wird das aufrufende Programm mit Delphi6 compiliert. Nun tritt der
Runtime Error auf.
In allen Units steht Sharemem als erste Unit. Es gibt noch weitere
Probleme mit der DLL, diese hier aufgeführte Funktion ist jedoch die
einfachste.
Die DLL statisch zu benutzen bringt keine Besserung.
Wer weiß Rat ?
Comment