Hallo zusammen,
ich weiß, dass dieses Thema schon oft diskutiert wurde. Habe selbst auch schon einige hilfreiche Tutorials dazu durchgeblättert.
Aber zum Funktionieren bringe ich das nicht. Statisch funktioniert, aber eben nicht dynamisch und jetzt wollte ich einfach einen Tip von euch.
Liegt's vielleicht an der Delphi Version? Hier Delphi 2009.
ich habe zunächst einfach ein Kapitel abgetippt zum Testen:
Die
DLL
Delphi-Quellcode:
library Rechne;
uses
SysUtils,
Classes;
{$R *.res}
Function addiere (Value1, Value2 : Integer) : Integer; stdCall;
Begin
Result := Value1 + Value2;
End;
Exports
addiere;
begin
end.
Die
Unit:
Delphi-Quellcode:
unit DLLUnit;
interface
Uses Windows;
Function addiere (Value1, Value2 : Integer) : Integer;
stdCall;
implementation
Function addiere (Value1, Value2 : Integer) : Integer;
stdCall;
external '
rechne.DLL';
end.
Soweit hat man's schon oft gesehen, funktioniert auch, aber eben statisch!
Nun Dynamisch:
Delphi-Quellcode:
unit DLLUnit2;
interface
Uses Windows;
Type TAddition =
Function (Value1, Value2 : Integer) : Integer;
Function addieren (Value1, Value2 : Integer) : Integer;
implementation
Function addieren (Value1, Value2 : Integer) : Integer;
Var Addition : TAddition;
Handle : THandle;
Begin
Handle := LoadLibrary('
Rechne.DLL');
if Handle <> 0
then
Try
@Addition := GetProcAddress(
Handle, '
addiere');
if @Addition <>
nil then
begin
Result := Addition(Value1, Value2);
end;
Finally
FreeLibrary(
Handle);
end;
End;
end.
Und hier hakt es bei der Result-Zeile.
Wie gesagt, nachdem das Beispiel abgetippt ist und so in zumindest ähnlicher Form in vielen verschiedenen Tut's oder Foren diskutiert wurde, eben die Frage, warum funktioniert es bei mir nicht?
Was habe ich nicht beachtet, was nicht richtig verstanden.
Ich danke euch vorab schon mal für eure Mühe
Gruß Wolfgang