tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
788
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von thekiller
    thekiller thekiller ist offline Viceinator
    Registriert seit
    Dec 2004
    Ort
    Wismar
    Beiträge
    396
    Hallo,

    gibt es eine Möglichkeit eine Klasseninstanz in jeder Headerdatei verfügbar zu machen ohne sie global zu deklarieren?
    Ich möchte ein Modul für Netzwerkarbeit entwickeln und es als Klasse verpacken. Nunja, da ich bestimmte Methoden in verschiedenen Teilen meines Programms benötige brauch ich die Klasse am besten global.

    Ich habe zwar folgende Möglichkeit entdeckt, aber diese wirft mir ein anderes Problem auf wo ich keine Lösung für finde. Und zwar, dass AfxSockInit() ja vor der ersten Deklaration von CSocket aufgerufen werden muss...

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    // MFCSocket.h
    #ifndef _MFCSOCKET_H
    #define _MFCSOCKET_H
     
    #include "afxsock.h"
     
    class MFCSocket {
        private: 
            UINT    uiPort;
        
        public:
            CSocket SocketInstance;
            CSocket ConnectionInstance;
            
            MFCSocket();
            ~MFCSocket();
            
            BOOL    OpenServer(UINT _uiPort);
            void    Close();
    };
     
    extern  MFCSocket   MFCSocketInstance;
     
    #endif

    Code cpp:
    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
    
    // MFCSocket.cpp
    #include "stdafx.h"
    #include "MFCSocket.h"
     
    MFCSocket::MFCSocket() {
        this->uiPort    = 50000;
    }
     
    MFCSocket::~MFCSocket() {
        this->SocketInstance.close();
        this->ConnectionInstance.close();
    }
     
    BOOL    MFCSocket::OpenServer(UINT  _uiPort) {
        this->uiPort    = _uiPort;
     
        this->SocketInstance.Create(this->uiPort);
        this->SocketInstance.Bind(this->uiPort);
        this->SocketInstance.Listen();
        this->SocketInstance.Accept(this->ConnectionInstance);
        
        return true;
    }
     
    void    MFCSocket::Close() {
        this->SocketInstance.close();
        this->ConnectionInstance.close();
    }
     
    MFCSocket   MFCSocketInstance;

    Ich hab den Code jetz nich getestet aber is auch nur damit Ihr wisst was ich meine.
    Na jedenfalls MFCSocketInstance kann ich zwar global überall verwenden aber AfxSockInit(); kann ich so ja nicht vor der Deklaration von SocketInstance und ConnectionInstance aufrufen und damit wird die Klasse unbrauchbar.
    Hoffe Ihr könnt mir helfen.

    LG Manu
    Geändert von thekiller (06.01.10 um 12:36 Uhr)
     
    OS: Win 7 Ultimate x64
    CPU: Intel Core i7 2600K (3,4GHz - 3,8 GHz)
    RAM: 4 x 8GB-DDR3 1333MHz
    Board: Asus P8Z68-V/Gen3
    GFX: Nvidia GTX580 (Palit)

    Cinema 4D R12, Photoshop CS5, Visual Studio 2010, Qt SDK, Notepad++
    blog.unlimitedengine.de
    design-projects.de

  2. #2
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Hallo, du könntest CSocket als Zeiger deklarieren und die Instanz im Konstruktor erst nach dem Aufruf von AfxSockInit() erzeugen.
    Code cpp:
    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
    
    // h
     
    class MFCSocket {
     
        ...
        
        public:
            CSocket *pSocketInstance;
            CSocket *pConnectionInstance;
     
        ...
            
    }; 
     
    // cpp
     
    MFCSocket::MFCSocket() {
        
        AfxSockInit();
        
        pSocketInstance     = new CSocket;
        pConnectionInstance = new CSocket;
     
        this->uiPort    = 50000;
    }
     
    MFCSocket::~MFCSocket() {
        pSocketInstance->close();
        pConnectionInstance->close();
        
        delete pSocketInstance;
        delete pConnectionInstance;
    }
    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  3. #3
    Avatar von thekiller
    thekiller thekiller ist offline Viceinator
    Registriert seit
    Dec 2004
    Ort
    Wismar
    Beiträge
    396
    Danke das funktioniert perfekt =)
    Erstmal auf sowas kommen

    LG Manu
     
    OS: Win 7 Ultimate x64
    CPU: Intel Core i7 2600K (3,4GHz - 3,8 GHz)
    RAM: 4 x 8GB-DDR3 1333MHz
    Board: Asus P8Z68-V/Gen3
    GFX: Nvidia GTX580 (Palit)

    Cinema 4D R12, Photoshop CS5, Visual Studio 2010, Qt SDK, Notepad++
    blog.unlimitedengine.de
    design-projects.de

Ähnliche Themen

  1. Variblen Global verfügbar machen
    Von spex im Forum PHP
    Antworten: 13
    Letzter Beitrag: 10.02.09, 00:19
  2. Objekt global verfügbar machen
    Von Igäl im Forum PHP
    Antworten: 3
    Letzter Beitrag: 15.12.08, 18:21
  3. Antworten: 6
    Letzter Beitrag: 15.06.06, 17:43
  4. CSS "global" verfügbar machen in Dreamweaver
    Von Pullmann im Forum HTML-Editoren
    Antworten: 1
    Letzter Beitrag: 31.01.06, 21:12
  5. Antworten: 4
    Letzter Beitrag: 07.11.04, 19:55