![]() |
dll Problem
Allmählich langt es mir mit den Fehlern, aber leider hat es den Anschein, dass mich die Bugs gerne haben und bei mir wohnen :( :(
Also mache gerade das ![]() wenn ich es in der VCL-Formularanwendung einfüge, dann sagt er mir: [Fehler] Programm1.pas(5): E2070 Unbekannte Direktive: 'x' [Fehler] Programm1.pas(11): E2003 Undefinierter Bezeichner: 'TForm' x kann ich eigentlich nirgends definieren, damit er es erkennt. er unterstreicht mir auch bei "TForm3 = class(TForm)" das (TForm). "implementation" unterstreicht er mir auch, nur er nennt mir noch keinen Grund. "I'm lost in Delphi!!" |
Re: dll Problem
Auf der verlinkten Seite kann ich kein TForm erkennen.
|
Re: dll Problem
Was hast du denn wo gemacht. So kann ich schwer eine Aussage machen.
Wenn du natürlich in ein leeres Programm x:=addiere(4,5) ist mir klar, dass er x nicht kennt. |
Re: dll Problem
das ist mir ja auch klar, dass er kein x kennt, aber wo kann ich ihm sagen, was x ist ohne dass er mir es wieder als Fehler anrechnet.
hier der Code:
Delphi-Quellcode:
unit Programm1;
interface function addiere(zahl1, zahl2: integer): integer; stdcall; x:=addiere(12, 3); uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm3 = class(TForm) private { Private-Deklarationen } public { Public-Deklarationen } end; var Form3: TForm3; implementation function addiere(zahl1, zahl2: integer): integer; stdcall; external 'rechnenpro.dll'; {$R *.dfm} end. |
Re: dll Problem
Das x:=addiere kommt ha jauch nicht dahin, sondern dort, wo du es brauchst. z.B. in einer Methode Button1Click, wo du dann x ausgibst (und als lokale Variable definiert hast; nur so als Beispiel).
|
Re: dll Problem
Delphi-Quellcode:
unit Programm1;
interface function addiere(zahl1, zahl2: integer): integer; stdcall; //x:=addiere(12, 3); Quatsch! Das war doch nur Beispielcode für die Verwendung uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm3 = class(TForm) private { Private-Deklarationen } public { Public-Deklarationen } end; var Form3: TForm3; implementation function addiere(zahl1, zahl2: integer): integer; stdcall; external 'rechnenpro.dll'; {$R *.dfm} end. |
Re: dll Problem
na gut, jetzt schreibt er mir
[Fehler] Programm1.pas(6): E2029 Deklaration erwartet, aber 'USES' gefunden und unterstreicht mir uses, und Button1.click |
Re: dll Problem
nimm mal die deklaration von function oberhalb von uses raus.
|
Re: dll Problem
:thumb:
zwischen den einzellnen Delphis gibt es leider immer wieder so kleine Bugs, aber danke an euch |
Re: dll Problem
habe das tutorial jetzt abgeschlossen, nur weiß ich ncht wie man zb. das Ergebnis ausgibt, mit label.caption wie üblich funktioniert es nicht ...
|
Re: dll Problem
wie sieht denn der Code aus ? so :
Delphi-Quellcode:
oder wie ???var x : Integer; begin x := Addiere(12,31); Label1.Caption := inttostr(x); end; |
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. |
Re: dll Problem
Delphi-Quellcode:
Getippt und nicht getestet.
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. |
Re: dll Problem
er zeigt mir 0 an??, aber sonst funktioniert es
|
Re: dll Problem
Es funktioniert nicht. Wahrscheinlich, weil es keine DLL namens "rechnen.dll" gibt.
Edit: [etwas ![]() |
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:
und da fügst du dann folgendes ein :
procedure TForm3.Button1Click(Sender: TObject);
begin end;
Delphi-Quellcode:
dann müsste das Ergebnis so aussehen :
Label1.Caption := inttostr(addieren(1,2));
Delphi-Quellcode:
dann starte das Programm und kliche auf den button und dann wirst du sehen das das Label eine 3 anzeigt.
procedure TForm3.Button1Click(Sender: TObject);
begin Label1.Caption := inttostr(addieren(1,2)); end; 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 |
Re: dll Problem
Du musst auch auf Groß- und Kleinschreibung achten.
|
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 :) |
Re: dll Problem
Hi!
Zuersteinmal hierzu: Zitat:
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... |
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 06:05 Uhr. |
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