Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi dll Problem (https://www.delphipraxis.net/106485-dll-problem.html)

dor557 11. Jan 2008 16:46

Re: dll Problem
 
wie sieht denn der Code aus ? so :

Delphi-Quellcode:
 
var x : Integer;

begin
  x := Addiere(12,31);
  Label1.Caption := inttostr(x);
end;
oder wie ???

STS301 11. Jan 2008 16:51

Re: dll Problem
 
zur Zeit so

Delphi-Quellcode:
unit Einbinden1;

interface

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

type
  TForm3 = class(TForm)
    Label1: TLabel;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation
type TSummenFunktion = function(zahl1, zahl2: integer): integer; stdcall;

function addieren(zahl1, zahl2: integer): integer;
var SummenFunktion: TSummenFunktion;
    Handle: THandle;
begin
Handle := LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'rechnen.dll'));

if Handle <> 0 then begin
    @SummenFunktion := GetProcAddress(Handle, 'addiere');
    if @SummenFunktion <> nil then begin
      result:=SummenFunktion(zahl1, zahl2);
    end;
FreeLibrary(Handle);

{$R *.dfm}
  end;
end;
end.

DeddyH 11. Jan 2008 17:01

Re: dll Problem
 
Delphi-Quellcode:
unit Einbinden1;

interface

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

type
  TForm3 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

type TSummenFunktion = function(zahl1, zahl2: integer): integer; stdcall;

function addieren(zahl1, zahl2: integer): integer;
var SummenFunktion: TSummenFunktion;
    Handle: THandle;
begin
  Result := 0;
  Handle := LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'rechnen.dll'));

  if Handle <> 0 then begin
    @SummenFunktion := GetProcAddress(Handle, 'addiere');
    if @SummenFunktion <> nil then begin
      result:=SummenFunktion(zahl1, zahl2);
    end;
    FreeLibrary(Handle);
  end;
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
  Label1.Caption := inttostr(addieren(15,2));
end;

end.
Getippt und nicht getestet.

STS301 11. Jan 2008 17:04

Re: dll Problem
 
er zeigt mir 0 an??, aber sonst funktioniert es

sirius 11. Jan 2008 17:08

Re: dll Problem
 
Es funktioniert nicht. Wahrscheinlich, weil es keine DLL namens "rechnen.dll" gibt.

Edit: [etwas fachübergreifendes] hier wäre wahrscheinlich eine Exception ganz angebracht :mrgreen:

dor557 11. Jan 2008 17:09

Re: dll Problem
 
Du hast warscheinlich vergessen eine Funktion zu erstellen die das auch aufruft !!

mach mal Folgendes :

erstelle auf dem Formular einen Button und Klicke den doppelt an dann hast du normal folgenden Code :

Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
begin

end;
und da fügst du dann folgendes ein :

Delphi-Quellcode:
  Label1.Caption := inttostr(addieren(1,2));
dann müsste das Ergebnis so aussehen :

Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
begin
   Label1.Caption := inttostr(addieren(1,2));
end;
dann starte das Programm und kliche auf den button und dann wirst du sehen das das Label eine 3 anzeigt.

Gruss Sascha

(Habe es bei mir getestet geht !)

Was du auch beachten solltest (Habe ich eben getestet) das die dll auch im gleichen verzeichnis ist, wie das Programm. und das der Name stimmt. wen ich die dll lösche bekomme ich auch eine 0 !

Gruss Sascha

DeddyH 11. Jan 2008 17:10

Re: dll Problem
 
Du musst auch auf Groß- und Kleinschreibung achten.

STS301 11. Jan 2008 17:14

Re: dll Problem
 
:wall: :wall: :wall: :wall: :wall: :wall: :wall:

ich habe vorhin den Code aus dem Tutorial kopiert, da hies die dll Datei natürlich nicht so wie meins

@sascha, danke für die ausführliche Erklährung ;)

:wall: :wall: :wall: :wall: :wall: :wall: :wall:

jetzt funktioniert es danke an alle :thumb:

//edit: ich sollte doch schon ins Bett gehen :)

wicht 11. Jan 2008 17:16

Re: dll Problem
 
Hi!

Zuersteinmal hierzu:
Zitat:

zwischen den einzellnen Delphis gibt es leider immer wieder so kleine Bugs, aber danke an euch
Sicher, dass das ein Delphi-Bug ist?

Zum Rest.. Dein Quelltext gibt doch gar keinen Aufschluss darüber, was wo mit dem Ergebnis gemacht wird. Wenn Form3 erzeugt wurde und ein Label hat, sollte die Ausgabe funktionieren. Schöner wäre es auch, wenn das Addieren eine Funktion der Klasse TForm3 wäre.. aber das nur nebenbei.

Nachtrag: Mieser roter Kasten.. ich poste trotzdem!
Nachtrag2: Beim roten Kasten war deine Antwort noch nicht drin... naja, ignoriert mich :) .. ich lasse mir wohl immer viel Zeit beim schreiben und bearbeiten...

STS301 11. Jan 2008 17:24

Re: dll Problem
 
naja, kommt darauf an wie schwerwiegend man einen Bug aufnimmt, es sind eher kleine Codeunterschiede zwischen den einzellnen delphiversionen.

ja, die roten Kasten, da muss man einfach schneller schreiben lernen :-D :-D :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz