Rückgabewert der OpenScManager Funktion



  • Hallöchen zusammen ,
    ich habe vor ein Programm zu erstellen was mir ein bisschen beim verwalten meiner Windows Dienste hilft .
    Leider bin ich grade erst am Anfang und habe schon ein Problem .
    Ich möchte mit der OpenSCManager Funktion http://msdn.microsoft.com/en-us/library/windows/desktop/ms684323(v=vs.85).aspx die service control manager Datenbank meines eigenen Computers öffnen .
    Nun zum eigentlichen Problem :

    HANDLE manager_handle;
    
    if (manager_handle = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS) != NULL )
    

    ;

    Ich versuche durch den Rückgabewert zu prüfen ob die Funktion fehlgeschlagen ist oder nicht .
    Allerdings sagt mir Visual Studio2013 ,dass ein bool Wert (in diesem Fall NULL) nicht mit dem Variablentyp HANDLE kompatibel ist (ist ja auch logisch) .
    Allerdings steht auf msdn doch der Rückgabewert wäre ein handle auf die ausgesuchte Datenbank .
    In welchen Variablentyp soll ich den Rückgabewert sonst einlesen ? 😃



  • Klammern setzen:

    if ((manager_handle = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)) != NULL )

    Siehe http://de.cppreference.com/w/cpp/language/operator_precedence



  • Hi schrieb:

    Klammern setzen:

    if ((manager_handle = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS)) != NULL )

    Siehe http://de.cppreference.com/w/cpp/language/operator_precedence

    Danke für deine Antwort .
    Ich muss ehrlich sagen so ganz habe ich noch nicht verstanden warum da noch 2 Klammern gefehlt haben .
    Der Compiler scheint ja irgendwie gedacht zu haben ich will der Variablen manager_handle NULL zuweisen oder sowas.
    Waren die 2 zusätzlichen Klammern einfach dafür da ,dass er manager_handle = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS) zuerst ausführt und danach den Rückgabewert mit NULL abgleicht?
    Wenn ja was ist denn davor genau falschgelaufen?
    Ich habe damit grade irgendwie ein Verständnissproblem.



  • Lies dir doch mal die Seite durch, die bereits verlinkt wurde. Die Zuweisung durch = hat eine niedrigere Priorität als der Vergleich durch != .

    Der Rückgabewert von OpenSCManager wird auf != NULL verglichen. So weit so gut, jedoch wird nicht der Rückgabewert, sondern das Ergebnis (false oder true) des Vergleiches manager_handle zugewiesen.

    Den Zweck der Klammern hast du richtig beschrieben.



  • EinGast schrieb:

    Lies dir doch mal die Seite durch, die bereits verlinkt wurde. Die Zuweisung durch = hat eine niedrigere Priorität als der Vergleich durch != .

    Der Rückgabewert von OpenSCManager wird auf != NULL verglichen. So weit so gut, jedoch wird nicht der Rückgabewert, sondern das Ergebnis (false oder true) des Vergleiches manager_handle zugewiesen.

    Den Zweck der Klammern hast du richtig beschrieben.

    Super danke jetzt hab ichs endlich gerallt .
    Manchmal dauert es halt länger bei mir 😃 .
    Ich hatte die Tabelle zwar angesehen ,aber dennoch nicht verstanden wo genau das Problem lag .


Anmelden zum Antworten