Thema: Delphi DLL Dynamisch Laden

Einzelnen Beitrag anzeigen

Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#1

DLL Dynamisch Laden

  Alt 11. Mai 2010, 23:03
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
Wolfgang
  Mit Zitat antworten Zitat