![]() |
Function Aufruf aus andere Unit
Hallo, bitte kann mir da jemand helfen ?
In unit1 (OptiNumericComm)deklariert als public: TOptiNumericComm = class(TObject) private comPort : TComPort; susiAPI : TSusiAPI; public OutInt : integer; InpType : byte; sim_on :boolean; constructor Create; function initOptiNumericComm(ComNo : integer) : boolean; function checkCommActive : boolean; procedure receiveMessage(sim_on:boolean;var Itype: byte); function transmitMessage(OutType : Byte; var MldgOK:boolean ) : boolean; end; In unit 2 aufgerufen : if TOptiNumericComm.checkCommActive then WriteXY(32,25,'CNC Schnittstelle inaktiv') //Fehler Balken else WriteXY(32,25,'CNC Schnittstelle aktiv'); In unit2 (MenueRefMan) als uses ist OptiNumericCom deklariert Fehler : [Fehler] MenueRefMan.pas(152): Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt checkCommActive ist ja klassenmethode ! Was ist da falsch ?? Danke für voraus |
AW: Function Aufruf aus andere Unit
Nein, das ist keine Klassenmethode. Klassenmethoden werden als class procedure bzw, class function deklariert und kommen ohne Instanz aus.
|
AW: Function Aufruf aus andere Unit
Wenn du keine Klassenmethode haben willst, musst du (ganz klassisch) eine Variable vom Typ TOptiNumericComm deklarieren und benutzen, und mit deren Instanz dann die Methode checkCommActive rufen.
Grüße Dalai |
AW: Function Aufruf aus andere Unit
Zur Veranschaulichung:
Delphi-Quellcode:
Aufrufe:
type
TDingens = class public // Methode procedure TuWas; // Klassenmethode class procedure TuwasAnderes; end; ... procedure TDingens.TuWas; begin ShowMessage('Ich bin die Methode einer Instanz von TDingens'); end; class procedure TDingens.TuwasAnderes; begin ShowMessage('Ich bin eine Klassenmethode und brauche keine Instanz'); end;
Delphi-Quellcode:
procedure TSomeForm.Tuwas;
var Dingens: TDingens; begin // Instanz erzeugen, benutzen und freigeben Dingens := TDingens.Create; try Dingens.TuWas; finally Dingens.Free; end; end; procedure TSomeForm.TuwasAnderes; begin // Geht auch ohne Instanz TDingens.TuwasAnderes; end; |
AW: Function Aufruf aus andere Unit
Habe ich etwas nicht verstanden:
function checkCommActive gehört doch zu Klasse TOptiNumericComm ? oder etwa nicht ? |
AW: Function Aufruf aus andere Unit
Jede Instanz, die Du von dieser Klasse erzeugst, verfügt über diese Methode. Aber Du musst so eine Instanz auch erst einmal erzeugen. War mein Beispiel so unverständlich?
|
AW: Function Aufruf aus andere Unit
Hallo,
Zitat:
Objekt erzeugen (Dingens:= TDingens.Create) Dingens.TuWas; Klasse muss nicht erzeugt werden TDingens.TuwasAnderes; Eine class-Methode wird ohne Objekt benutzt. class-Methode <> Methode einer Klasse |
AW: Function Aufruf aus andere Unit
Hallo DeddyH
Zuerst danke,so weit habe ich Dein Beispiel verstanden, ich meinte habe es genau so gemacht, also die methode in unit1 als nicht klassenMethode, dafür mit Instanziern im unit2. Aber es ist nach wie vor der gleiche fehler. //in der unit2 procedure Man; Var i :integer; OptiNumericComm :TOptiNumericComm; begin OptiNumericComm := TOptiNumericComm.Create; Init_IstWerte(IstWerte_Alt); //usw .... //der Aufruf if TOptiNumericComm.checkCommActive then WriteXY(32,25,'CNC Schnittstelle aktiv') //Fehler Balken else WriteXY(32,25,'CNC Schnittstelle inaktiv'); //..... [Fehler] MenueRefMan.pas(152): Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt |
AW: Function Aufruf aus andere Unit
jetzt ist es gegangen, der Aufruf musste sein :
if OptiNumericComm.checkCommActive then Vielen Dank Euch allen |
AW: Function Aufruf aus andere Unit
Falls du es noch nicht weißt, es gibt die Möglichkeit beim Verfassen eines Posts, den Delphi-Quelltext zu formatieren, so wie es die antwortenden User auch machen.
Der Vorteil ist, dass es einfach besser und schneller lesbar ist (keine Proportionalschrift und führende Leerzeichen werden angezeigt). Das ist das Symbol mit dem gelben Helm. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:43 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