![]() |
Unitis, external Proceduren deklarieren, oder wie auch immer
Moin, Moin
ich hab gerade ein kleines Projekt geschrieben, welches langsam ausufert. Deshalb hab ich jetzt mal versucht meherer Units zu schreiben und mein Hauptprogramm aufzuräumen. :coder: Soweit so gut. Dachte mir das jetzt auch mal richtig mit den Classen so zu machen, da es ja wirklich die Übersichtlichkeit verbessert. :coder2: Nun mein Problem: In der Main Unit möchte ich die Procedure
Delphi-Quellcode:
aufrufen, welche ich in einer anderen Unit geschrieben habe.
procedure Initalisierung_CANController(Netz : HCANNet ; Hardware : HCANHw ;
Baudrate : Integer ; Netzname : String ; Clientname : String ; var Client : HCANClient);
Delphi-Quellcode:
Das funktioniert aber so nicht. Hab zunächst einen Fehler in der Klassendeklaration. Wie muss ich das schreiben, dass die Prozedur auch in dem Hauptprogramm erkannt wird?? Irgendwas mit external????
interface
uses Windows,WinTypes, Winprocs, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CanApi2, ExtCtrls, ComCtrls, Menus, SyncObjs, Grids; type //allgemeine Controlerbezeichnung TController = CLASS m_hClient: HCANClient; // Typ 'Client-Handle' Byte Variable aus Unit CANAPI2 eigentlich eine Byte Variable m_hNet : HCANNet; m_hHardware : HCANHw; END ; CAN_Controller = CLASS(TController); procedure Initalisierung_CANController(Netz : HCANNet ; Hardware : HCANHw ; Baudrate : Integer ; Netzname : String ; Clientname : String ; var Client : HCANClient); private { Private-Deklarationen } public { Public-Deklarationen } end; implementation //****************************************************************************** // Initalisierung des Controllers // // Funktion : Einrichen und Verbinden des CAN Controllers mit einem Nezt. // Alle wichtigen Parameter können eingestellt werden. // // Eingabeparameter : - Clientname : Name des Clients, der angemeldet ist, wird vom aufruf übergeben // - Netz : Handle des PCAN-Netzes Nummer des Netzes : definiert in CanApi2 // - Netzname : Name des Netzes,wo sich angemeldet werden soll // - Hardware : angeschlossene Hardware // - Baudrate : einstellen der Übertragungsrate // // Rückgabewert : - Client : Gibt den Client zurück //****************************************************************************** procedure Initalisierung_CANController(Netz : HCANNet ; Hardware : HCANHw ; Baudrate : Integer ; Netzname : String ; Clientname : String ; var Client : HCANClient); Im Hauptprogrmm hab ich schon die Unit eingebunden und es Funktioniert auch. Vielen Dank für eure Hilfe |
Re: Unitis, external Proceduren deklarieren, oder wie auch i
Hi,
ein paar Fragen: Soll Initalisierung_CANController eine Methode von CAN_Controller sein? -> Wenn ja, muss das Semikolon nach CAN_Controller = CLASS(..) weg. Und vor Initalisierung_CANController gehört im implementaion-Teil dann noch der Klassenname. -> Wenn nein, was tun dann private und public da? (soll heißen, die müssen da weg :mrgreen: ) Zitat:
Zitat:
Gruß Stephan :dance: |
Re: Unitis, external Proceduren deklarieren, oder wie auch i
Also, die procedure soll eine Methode der Klasse sein.
Sieht jetzt so aus und das müsste auch richtig sein.
Delphi-Quellcode:
wenn ich das so schreibe, dann bekomme ich wieder die Fehlermeldung:
type
//allgemeine Controlerbezeichnung TController = CLASS m_hClient: HCANClient; // Typ 'Client-Handle' Byte Variable aus Unit CANAPI2 eigentlich eine Byte Variable m_hNet : HCANNet; // Typ 'Net-Handle' Byte Variable aus Unit CANAPI2 eigentlich eine Byte Variable m_hHardware : HCANHw; // Typ 'Hardware-Handle' Byte Variable aus Unit CANAPI2 eigentlich eine Byte Variable END ; CAN_Controller = CLASS(TController) procedure Initalisierung_CANController(Netz : HCANNet ; Hardware : HCANHw ; Baudrate : Integer ; Netzname : String ; Clientname : String ; var Client : HCANClient); end; implementation
Delphi-Quellcode:
Hab mich eben ein bissel blöd ausgedrückt, mit :
[Fehler] Controller.pas(35): Ungenügende Forward- oder External-Deklaration: 'CAN_Controller.Initalisierung_CANController'
Zitat:
Wie geht der Funktionsaufruf?? Was muss ich alles in der Main deklarieren?? |
Re: Unitis, external Proceduren deklarieren, oder wie auch i
Hi,
hast Du im implentation-Teil den Klassennamen vor den Methodennamen geschrieben?
Delphi-Quellcode:
(Man beachte das "CAN_Controller." :stupid: )
interface
... CAN_Controller = ... procedure Initialisierung_... ... implementation ... procedure CAN_Constroller.Initalisierung_CANController(Netz : HCANNet ; Hardware : HCANHw ; Baudrate : Integer ; Netzname : String ; Clientname : String ; var Client : HCANClient); In der aufrufenden Unit musst Du die aufzurufende Unit einbinden (hast ja schon gemacht), dann kannste ein Objekt Deiner Klasse erzeugen und auf dieses wie gewohnt zugreifen (durch das Einbinden in die uses ist in der aufrufenden unit der interface-Teil der aufzurufenden unit bekannt, somit auch CAN_Controller und deren veröffentlichten Methoden, Ereignisse und Eigenschaften ;) ):
Delphi-Quellcode:
PS: Vor dem Klassennamen schreibt man gewöhnlich ein T --> also TCAN_Controller :zwinker:
...
var myCanCtrl : CAN_Controller; begin myCanCtrl := CAN_Controller.Create(); myCanCtrl.InitialisierungCanController(...); ... end; Gruß Stephan :dance: |
Re: Unitis, external Proceduren deklarieren, oder wie auch i
Jo Super, Funktioniert :hello:
Vielen Dank :hi: Für alle anderen, die auch mal ein Problem damit haben sollten.
Delphi-Quellcode:
In der Anderen Unit:
Unit main.pas
public CAN_Controller : TCAN_Controller; // Can Controller einstellungen und eingenschaften, // Klasse deklariert in der Controller.pas .... //Funktionsaufruf CAN_Controller.Initalisierung_CANController( 5 , m_hHardware, CAN_BAUD_500K , 'Testnet' , 'Oliver' , m_hClient );
Delphi-Quellcode:
Nochmal vielen Dank an alle :hi:unit Controller; interface uses Windows,WinTypes, Winprocs, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CanApi2, ExtCtrls, ComCtrls, Menus, SyncObjs, Grids; type //allgemeine Controlerbezeichnung TController = CLASS m_hClient: HCANClient; // Typ 'Client-Handle' Byte Variable aus Unit CANAPI2 eigentlich eine Byte Variable m_hNet : HCANNet; // Typ 'Net-Handle' Byte Variable aus Unit CANAPI2 eigentlich eine Byte Variable m_hHardware : HCANHw; // Typ 'Hardware-Handle' Byte Variable aus Unit CANAPI2 eigentlich eine Byte Variable END ; TCAN_Controller = CLASS(TController) procedure Initalisierung_CANController(Netz : HCANNet ; Hardware : HCANHw ; Baudrate : Integer ; Netzname : String ; Clientname : String ; var Client : HCANClient); end; implementation procedure TCAN_Controller.Initalisierung_CANController(Netz : HCANNet ; Hardware : HCANHw ; Baudrate : Integer ; Netzname : String ; Clientname : String ; var Client : HCANClient); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:49 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