Zugriff aug globle variablen



  • Moin
    Ich habe ne MFC erweiterungs DLL geschrieben. Dort gibts ja diese Funktion DllMain. Direkt unterhalb hab ich eine Funktion geschrieben

    //DLL Klasse
    //DllMain(...) {...}
    extern PGconn* conn;
    PGconn* conn;
    
    extern "C" __declspec(dllexport) void SetDLLConn(PGconn* pConn)
    {   
       conn = pConn;  
    }
    

    Wie kann ich jetzt auf die conn Variable von einer anderen hinzugefügten Klasse zugreifen? Ich hab ja keine *.h 😞
    thx&cya



  • Es ist nicht verboten eine Header-Datei anzulegen.
    Dort schreibst Du dann dein

    extern PGconn* conn;
    

    rein.
    Oder hab ich da was übersehen ?



  • Hi!
    Das geht leider nicht. Dann schreibt er irgenwas von ner doppelten deklaration 😞

    mfg



  • Bei mir funktioniert es problemlos:
    Hier mal ein Beispiel:
    Header klasse.h

    #if !defined KLASSE_HEADER
    #define KLASSE_HEADER
    
    // Hier PGconn definieren oder Header mit PGconn-Definition einbinden:
    // erstmal ganz simpel:
    typedef int PGconn;
    extern PGconn* conn;
    
    // Deine Klasse
    class Klasse{
    	PGconn* getGlobalVar();
    };
    
    #endif //KLASSE_HEADER
    

    Code klasse.cpp

    #include "stdafx.h"
    #include "klasse.h"
    //Beispielfunktion
    PGconn* Klasse::getGlobalVar(){
    	return conn;;
    }
    

    Die automatisch erstellte dll.cpp:

    #include "stdafx.h"
    #include <afxdllx.h>
    
    #include "klasse.h"
    
    //...
    // DllMain u.s.w.
    //...
    
    // Deine globale Variable:
    PGconn* conn; 
    extern "C" __declspec(dllexport) void SetDLLConn(PGconn* pConn) 
    {    
       conn = pConn;   
    }
    

    mfg



  • Hi!
    Vielen Danke für deine Antwort!!!!
    Leider bekomm ich nach wie vor folgenden Fehler, wenn ich

    CConn* pCon; pCon->getGlobalVar();
    

    in PartView.cpp schreibe
    WordEx.obj : error LNK2005: "struct pg_conn * conn" (?conn@@3PAUpg_conn@@A) bereits in PartView.obj definiert
    WordEx.obj : warning LNK4006: "struct pg_conn * conn" (?conn@@3PAUpg_conn@@A) bereits in PartView.obj definiert; zweite Definition wird ignoriert
    Bibliothek Debug/WordEx.lib und Objekt Debug/WordEx.exp wird erstellt
    PartView.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: struct pg_conn * __thiscall CConn::getGlobalVar(void)" (?getGlobalVar@CConn@@QAEPAUpg_conn@@XZ)

    Weißt du zufällig was ich da falsch mache?
    Meine Conn.h

    #include "libpq-fe.h"
    
    PGconn* conn;
    extern PGconn* conn; 
    
    class CConn{ 
    public:
        PGconn* getGlobalVar(); 
    };
    

    Meine Con.cpp

    #include "stdafx.h" 
    #include "Conn.h" 
    
    PGconn* CConn::getGlobalVar(){ 
        return conn;
    }
    

    Implementierung:

    extern "C" __declspec(dllexport) void SetDLLConn(PGconn* pConn)
    {   
    	conn = pConn;  
    }
    

    thx&mfg



  • Hi!
    Es funktioniert jetzt. Danke für deine Hilfe 🙂
    Bin kurzzeitig auf dem Schlauch gestanden ;=)

    cya


Anmelden zum Antworten