Konvertierung von IntPtr (HWND) auf HANDLE
-
Jochen Kalmbach schrieb:
@Mods: => C++/CLI
Oh, okay.
-
Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Verwende bitte
USBDevice = new CCyUSBDevice((HANDLE) this->Handle);
-
Danke für den Tipp, ich kann mein Projekt nun fehlerfrei kompilieren.
Leider kommt es bei der Ausführung der Applikation zu folgendem Fehler:
"Object reference not set to an instance of an object."
-> Was zum Teufel soll das nun bedeuten ?
-> Wenn ich die Klammer hinter CCyUSBDevice**()** leer lasse bekomme ich den Fehler nicht...
-
Du musst schon die Stelle anschauen, wo der Fehler auftritt... oder hier die entsprechenden Codezeilen posten...
-
Der Fehler tritt exakt bei dieser Zeile auf:
USBDevice = new CCyUSBDevice((HANDLE) this->Handle);
-
this->Handle wird leer bzw. nicht gesetzt sein.
Tip: Splitte die Zeile mal auf:
USBDevice = new CCyUSBDevice( (HANDLE) this->Handle);
und schau wo der Debugger hängen bleibt.
Btw.: Wieso die hässlichen C Casts ?
-
Was für Alternativen habe ich denn um die "hässlichen C-Casts" zu umgehen?
Der Debugger bleibt bei der mittleren Zeile hängen - also bei der Ausführung von this->Handle
Die exception ist übrigens: "System.NullReferenceException"
Ich habe mir mal "this->Handle" im Debugger angeschaut: dort erhalte ich an oben erwähnter Stelle den Wert 0x704dc (__int32), also definitiv einen Wert, der nicht Null ist!
-
maggi01 schrieb:
Was für Alternativen habe ich denn um die "hässlichen C-Casts" zu umgehen?
static_cast, Konstruktoren und ... reinterpret_cast.
-
Schau Dir in diesem Handle mal den Value Wert an.
Kurz: Handle ist nicht gesetzt zu der Zeit in der Du es benutzen willst.
-
Bei diesen beiden Varianten wird eine Konvertierung von IntPtr zu HANDLE nicht erlaubt:
reinterpret_cast <HANDLE> (this->Handle); __try_cast <HANDLE> (this->Handle);
Nur mit dem static_cast lässt sich der Code kompilieren, allerdings löst die Applikation die gleichen Exception, wie oben beschrieben aus...
...dat war wohl nix...
Hat noch jemand Vorschläge !?
-
@knuddlbaer: hab eben mal versucht mit this->CreateHandle() einen neuen Handle zu erzeugen, allerdings bekomme ich dann die Exception "Window Handle already exists!"
Also habe ich auf jeden Fall einen gültigen Handle... nur diese blöde CyAPI will diesen nicht akzeptieren (glaube ich...)