globale Variablen und der Umgang mit jenen



  • Hallo liebe Forumsmitglieder,

    ich lese zwar schon eine ganze Weile mit, aber da ich im Rahmen meiner Diplomarbeit doch vor einem C++-Problem stecke und trotz Google und Suchfunktion keine brauchbaren Sachen finden konnte, hab ich mich hier doch mal registriert. Um es vorweg zu nehmen, ich studiere Kommunikationstechnik und nicht Informatik etc. sprich: Meine Programmierkenntnisse bewegen sich irgendwo ziemlich weit unten.

    Nun aber zum Problem:

    Ich möchte einen USB-CAN-Adapter, der über einen DLL-Treiber in Win-XP installiert ist, ansteuern (senden und lesen). Das ganze funktioniert einwandfrei, solange sich die Sendeobjekte im Hauptfenster (Form 1) befinden. Der Übersichtlichkeit wegen habe ich ein weiteres Form-Fenster angelegt, aus welchem auch gesendet werden soll. Fürs Senden benötigt man 2 Variablen. Zum einen das Array "msg" und dann noch das Handle "h".
    Beide habe ich in der *.h-Datei des Form 1-Fensters (global wie ich meine) deklariert.

    #ifndef CL_UH
    #define CL_UH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    #include <Dialogs.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published: // Von der IDE verwaltete Komponenten
    TLabel *Label1;
    ...
    void __fastcall Button7Click(TObject *Sender);
    private: // Anwender-Deklarationen
    public: // Anwender-Deklarationen

    __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------

    CANHANDLE h;
    CANMsg msg;

    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif

    Leider werden beide Variablen nicht an das Form2-Fenster übergeben, so daß zwar während des Betriebes keine Fehlermeldungen kommen, jedoch auch nichts weiter mit dem Adapter passiert.

    Lediglich der Compiler spuckt mir 2 Warnungen aus...

    [Linker Warnung] Public symbol '_h' defined in both module C:\...\CAN-LOGGER\CL_U.OBJ and C:\...\CAN-LOGGER\CL2_U.OBJ

    [Linker Warnung] Public symbol '_msg' defined in both module C:\...\CAN-LOGGER\CL_U.OBJ and C:\...\CAN-LOGGER\CL2_U.OBJ

    Ich hab zwar schon oft aus den verschiedensten Gründen gelesen, daß man keine globalen Variablen definieren soll, aber bei den beiden Variablen (vor allem bei dem Handle macht das wirklich Sinn, da ich den Adapter ja nicht für jede Nachricht neu Initialisieren will.

    Wie also kann ich die beiden Variablen korrekt deklarieren, so daß alle Forms drauf zugreifen können?

    Vielen Dank im Voraus,

    Holger





  • 🙂 Traumhaft... genau das, wonach ich gesucht habe. Vielen Dank 👍


Anmelden zum Antworten