Entwickler-Ecke
C# - Die Sprache - Ausdruck ist immer "false" (IntPtr)
mumpiz - Mi 20.09.17 15:11
Titel: Ausdruck ist immer "false" (IntPtr)
Hallo,
die IDE gibt mir den Hinweis dass folgender Ausdruck immer false ist.
Kann mir jemand sagen warum?
C#-Quelltext
1: 2: 3: 4: 5:
| hProcess = ProcessMemoryReaderApi.OpenProcess((uint)access, 1, (uint)ReadProcess.Id); if (hProcess == null) { throw new Exception("Opening process failed!"); } |
Ich möchte das Programm daran hindern weiter zu machen wenn ein Fehler beim öffnen eines Prozesses aufgetreten ist.
Moderiert von Th69: Titel geändert ("(IntPtr)" hinzugefügt)
Delphi-Laie - Mi 20.09.17 15:33
Dann wird wohl hProcess stets ungleich Null sein.
Edit: Das Problem ist wohl, daß Du ein ungültiges OpenProcess abfangen möchtest...dann wird hProcess wohl Null sein.
Blup - Mi 20.09.17 15:44
Vieleicht so?
Moderiert von Th69: C#-Tags hinzugefügt
Delete - Mi 20.09.17 15:45
- Nachträglich durch die Entwickler-Ecke gelöscht -
Delphi-Laie - Mi 20.09.17 15:48
Liebe Experten, dazu eine fast philosophische Frage: Kann der Compiler nicht bemerken, daß die Typen zum einen des Handles und dazu der des für den Vergleich kredenzten Wertes nicht übereinstimmen, und daraufhin einen paßgenaueren Alarm schlagen?
Blup - Mi 20.09.17 16:05
Man kann nicht alles haben, automatische Typkonvertierung und Typprüfung.
Ralf Jansen - Mi 20.09.17 16:17
Eigentlich bekommt man bei einem solchen Vergleich von VS eine Warnung
Zitat: |
The result of the expression is always 'false' since a value of type 'blahblah' is never equal to 'null' of type 'blahblah?' |
Hilft natürlich nur wenn man nicht der Unart anheimfällt Warnungen zu ignorieren weil man in seinem Code schon so viele hat das man die Relevanten nicht findet.
mumpiz - Mi 20.09.17 16:41
Blup hat folgendes geschrieben : |
Vieleicht so?
|
Das habe ich zuerst probiert, dann kommt beim erstellen allerdings diese Fehlermeldung:
Quelltext
1:
| Operator '==' cannot be applied to operands of type 'System.IntPtr' and 'int' (CS0019) - |
Wenn IntPtr hProcess nicht initialisiert wird, welchen Wert hat dieser dann?
Frühlingsrolle hat folgendes geschrieben : |
... die genaue Quellangabe zur Klasse ProcessMemoryReaderApi() wäre fein gewesen ...
|
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| static class ProcessMemoryReaderApi { .... [DllImport("kernel32.dll")] public static extern IntPtr OpenProcess(UInt32 dwDesiredAccess, Int32 bInheritHandle, UInt32 dwProcessId); .... } |
Gruß
Moderiert von Th69: Beitragsformatierung (Zitate) überarbeitet.
Delete - Mi 20.09.17 16:54
- Nachträglich durch die Entwickler-Ecke gelöscht -
mumpiz - Mi 20.09.17 16:55
Ah super, genau.
Danke!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!