Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Zugriff auf andere Unit geht nicht


jackle32 - Fr 04.01.13 21:12
Titel: Zugriff auf andere Unit geht nicht
Hallo zusammen,

ich habe ein sehr merkwürdigen Fehler wenn ich eine Funktion in eine andere Unit auslagere.

Hier mal der Quellcode


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
//Hier die Hauptunit

unit UtUI;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, xmldom, XMLIntf, msxmldom, XMLDoc, UtMaschine;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    Button2: TButton;
    XMLDocument1: TXMLDocument;
    Button3: TButton;
    TreeView1: TTreeView;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    //masternode: TTreenode;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  self.Memo1.Lines.LoadFromFile('Dateipfad');  //Pfad wurde von mir verändert!
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin

  i := test; //Hier will ich die Funktion aufrufen

  self.Memo2.Lines.Add('Analysierte Zeilen: ' + inttostr(i));
end;

end.


Hier die zweite Unit "UtMaschine".


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
unit UtMaschine;

interface

implementation

function test: integer;
var
  i : integer;
begin
  i := 0;
  i := i+1;
  result := i;
end;

end.


Der Fehler der dabei immer kommmt ist:

Delphi-Quelltext
1:
[Error] UtUI.pas(48): Undeclared identifier: 'test'                    


Hab keine Ahnung mehr wo der Fehler noch stecken kann.

Das gleiche Problem hab ich auch noch mit einer anderen Funktion aus einer anderen Unit.

Gruß
Jack


jaenicke - Fr 04.01.13 21:15

Du hast die Funktion im Moment nur unter implementation definiert. In der Schnittstelle nach außen, zu anderen Units, also unter interface, hast du die nicht drin. Deshalb kannst du sie von außen auch nicht nutzen. Funktionieren tut es so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
unit UtMaschine;

interface

function test: integer;

implementation

function test: integer;
var
  i : integer;
begin
  i := 0;
  i := i+1;
  result := i;
end;

end.


FinnO - Fr 04.01.13 21:16

Moin,

damit die Funktion nach außen hin sichtbar ist, musst du sie auch Deklarieren.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
[...]
interface

  function test : integer;

implementation
  
function test : integer
begin

end;


€dit: Too late, apologize!


jackle32 - Fr 04.01.13 21:20

Super danke euch!!

Jetzt funktionierts.

Danke nochmals.

Gruß
Jack