Einzelnen Beitrag anzeigen

Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#10

Re: DLLs erstellen und in Programm einbauen

  Alt 30. Nov 2009, 12:50
Hallo,

ich habe es jetzt geschafft die Datei einzubinden.

Hier der Code:

Delphi-Quellcode:
unit rechner;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, rechnen;

type
  TForm1 = class(TForm)
    cmdGo: TButton;
    edZahl1: TEdit;
    edZahl2: TEdit;
    lblErgebnis: TLabel;
    procedure cmdGoClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.cmdGoClick(Sender: TObject);
var
  zahl1, zahl2: integer;
begin
  zahl1 := strtoint(edZahl1.Text);
  zahl2 := strtoint(edZahl2.Text);

  lblergebnis.Caption := inttostr(rechnen.addieren(zahl1, zahl2));
end;

end.
Delphi-Quellcode:
unit rechnen;

interface

uses
  windows, sysutils;

type
  TSummenFunktion = function(zahl1, zahl2: integer): integer; stdcall;
// TDifferenzFunktion = function(zahl1, zahl2: integer): integer; stdcall;
function addieren(zahl1, zahl2: integer): integer;
//function subtrahieren(zahl1, zahl2: integer): integer;

implementation

function addieren(zahl1, zahl2: integer): integer;
var
  SummenFunktion: TSummenFunktion;
  Handle: THandle;
begin
  Handle := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + 'rechne.dll'));
  if Handle <> 0 then
  begin
    @SummenFunktion := GetProcAddress(Handle, 'addieren');
    if @SummenFunktion <> nil then begin
      result := SummenFunktion(zahl1, zahl2);
    end;
    FreeLibrary(Handle);
  end;
end;

end.
Aber egal welche Zahlen ich zum addieren eingebe, ich bekomme immer: 4475786 als Ergebnis.

Kann mir jemand sagen wieso?

Edit: fehler gefunden.

    @SummenFunktion := GetProcAddress(Handle, 'addieren'); muss so aussehen:

    @SummenFunktion := GetProcAddress(Handle, 'addiere'); Aber kann mir jemand sagen wofür das @ bei "@SummenFunktion" steht?

Gruß,
Schnittcher
  Mit Zitat antworten Zitat