probleme mit windows.h



  • hi,
    der quellcode den ich benutze beinhaltet eine funktion

    TEST_API bool connect(const char* sessionID);

    sobald ich die headerdatei windows.h include kann ich diese funktion nicht mehr benutzen.

    es erscheint folgender fehler

    3>.\tester.c(30) : warning C4024: 'connect': Unterschiedliche Typen für formalen und übergebenen Parameter 1
    3>.\tester.c(30) : error C2198: "connect": Nicht genügend Argumente für Aufruf.

    ich bin kein richtiger informatiker, aber ich vermute windows.h enthält ebenfalls eine funktion connect und das löst den konflikt aus.
    die windows. binde ich ein um folgendes benutzen zu können:

    TCHAR szFileName[230];
    GetModuleFileName(NULL, szFileName,230);

    gibt es eine lösung für solche konflikte so das ich das als programmieranfänger beheben kann, beispielsweise das lediglich das included wird aus der windows.h was ich benötige.

    dankeschön



  • Du könntest einfach deine Funktion umbennen oder sie in einem eigenen Namespace verpacken



  • das mit dem umbenennen ist nicht ganz so einfach, der quellcode muss an diesen stellen so bleiben.

    die header datei sieht im gesamten so aus.
    wie schon erwähnt ich kenn mich nicht ganz so gut aus, existiert hier vielleicht schon ein namespace. bzw. kann ich ganz gezielt die connect funktion hier aufrufen wenn möglich ohne was an der header zu verändern.

    #pragma once

    #ifdef __cplusplus
    extern "C"
    {
    #endif /* ifdef __cplusplus */

    #ifdef TEST_EXPORTS
    #define TEST_API __declspec(dllexport)
    #else
    #define TEST_API __declspec(dllimport)
    #endif

    TEST_API bool connect(const char* sessionID);

    TEST_API bool disconnect();

    #ifdef __cplusplus
    }
    #endif /* ifdef __cplusplus */



  • namespace n1
    {
        deine connect funktion connect()
        {
        // code von connect
    
        }
    }
    

    Das könntest du dann mit

    n1::connect();
    

    aufrufen.
    Da wird die Funktion zwar nicht umbenannt, aber du musst ein n1:: davorstellen.



  • der quellecode ist sehr verzweigt und groß müsste ich dann an allen stellen die connect so aufrufen oder könnte ich dort wo die windows.h nicht includiert ist den quelltext so belassen.
    am besten wäre es wenn ich die windows.h mit solch einem namespace versehen könnte so das alle funktionen aus dieser header mit n1::funktion aufgerufen werden müssten.



  • Die connect Funktion ist definiert in winsock2.h, automatisch included from windows.h.

    #define NOWINSOCK // disable connect and any other winsock function
    #include <windows.h>
    
    int connect(...) {}
    

    Oder einfacher:

    #include <windows.h>
    int Connect(...) {}
    


  • super danke


Anmelden zum Antworten