AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Unitis, external Proceduren deklarieren, oder wie auch immer
Thema durchsuchen
Ansicht
Themen-Optionen

Unitis, external Proceduren deklarieren, oder wie auch immer

Ein Thema von Osse · begonnen am 29. Apr 2005 · letzter Beitrag vom 29. Apr 2005
Antwort Antwort
Osse

Registriert seit: 25. Mär 2005
Ort: Hamburg
74 Beiträge
 
Delphi 5 Enterprise
 
#1

Unitis, external Proceduren deklarieren, oder wie auch immer

  Alt 29. Apr 2005, 11:18
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.

Soweit so gut.

Dachte mir das jetzt auch mal richtig mit den Classen so zu machen, da es ja wirklich die Übersichtlichkeit verbessert.

Nun mein Problem:

In der Main Unit möchte ich die Procedure
Delphi-Quellcode:
 procedure Initalisierung_CANController(Netz : HCANNet ; Hardware : HCANHw ;
    Baudrate : Integer ; Netzname : String ; Clientname : String ; var Client : HCANClient);
aufrufen, welche ich in einer anderen Unit geschrieben habe.

Delphi-Quellcode:
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);
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????

Im Hauptprogrmm hab ich schon die Unit eingebunden und es Funktioniert auch.

Vielen Dank für eure Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#2

Re: Unitis, external Proceduren deklarieren, oder wie auch i

  Alt 29. Apr 2005, 11:27
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 )

Zitat:
Hab zunächst einen Fehler in der Klassendeklaration.
Welchen Fehler?

Zitat:
...dass die Prozedur auch in dem Hauptprogramm erkannt wird?? ...
Im Hauptprogrmm hab ich schon die Unit eingebunden und es Funktioniert auch.
??? Funktionierts nun im 'Hauptprogramm' oder nicht?


Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Osse

Registriert seit: 25. Mär 2005
Ort: Hamburg
74 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: Unitis, external Proceduren deklarieren, oder wie auch i

  Alt 29. Apr 2005, 11:39
Also, die procedure soll eine Methode der Klasse sein.

Sieht jetzt so aus und das müsste auch richtig sein.

Delphi-Quellcode:
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
wenn ich das so schreibe, dann bekomme ich wieder die Fehlermeldung:
[Fehler] Controller.pas(35): Ungenügende Forward- oder External-Deklaration: 'CAN_Controller.Initalisierung_CANController' Hab mich eben ein bissel blöd ausgedrückt, mit :
Zitat:
Im Hauptprogrmm hab ich schon die Unit eingebunden und es Funktioniert auch.
Ich hab die Unit in mein Hauptprogramm eingebunden, kann aber die Procedure nicht aufrufen.

Wie geht der Funktionsaufruf??

Was muss ich alles in der Main deklarieren??
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#4

Re: Unitis, external Proceduren deklarieren, oder wie auch i

  Alt 29. Apr 2005, 11:50
Hi,

hast Du im implentation-Teil den Klassennamen vor den Methodennamen geschrieben?
Delphi-Quellcode:
interface
  ...
  CAN_Controller = ...
    procedure Initialisierung_...
...
implementation
...
procedure CAN_Constroller.Initalisierung_CANController(Netz : HCANNet ; Hardware : HCANHw ;
    Baudrate : Integer ; Netzname : String ; Clientname : String ; var Client : HCANClient);
(Man beachte das "CAN_Controller." )

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:
...
var
  myCanCtrl : CAN_Controller;
begin
  myCanCtrl := CAN_Controller.Create();
  myCanCtrl.InitialisierungCanController(...);
  ...
end;
PS: Vor dem Klassennamen schreibt man gewöhnlich ein T --> also TCAN_Controller

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Osse

Registriert seit: 25. Mär 2005
Ort: Hamburg
74 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Unitis, external Proceduren deklarieren, oder wie auch i

  Alt 29. Apr 2005, 12:20
Jo Super, Funktioniert

Vielen Dank

Für alle anderen, die auch mal ein Problem damit haben sollten.
Delphi-Quellcode:
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 );
In der Anderen Unit:
Delphi-Quellcode:

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);
Nochmal vielen Dank an alle
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz