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 Vergleichesmanager_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 Vergleichesmanager_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 .