Veröffentlicht 22. August 200817 j Hallo, worin besteht der Unterschied zwischen beiden Zeilen? PDEVICE_EXTENSION pDeviceExtension = (PDEVICE_EXTENSION) (ConfigInfo->HwDeviceExtension); PDEVICE_EXTENSION pDeviceExtension = ConfigInfo->HwDeviceExtension; Der Compiler erzeugt in beiden Fällen den gleichen Code: MOV EDX,[EBD+ConfigInfo] MOV EAX,[EDX+04] MOV [EBD+pDeviceExtension],EDX Ich habe schon vergeblich in meinen Büchern gesucht, aber nichts gefunden. Vielen Dank im voraus
22. August 200817 j Hi, sieht für mich aus wie ein Cast nach PDEVICE_EXTENSION. Wenn HwDeviceExtension vom Typ PDEVICE_EXTENSION ist, wonach es aussieht, passiert da auch nix.
22. August 200817 j Herzlichen Dank für die Antwort, es ist eine Datentypumwandlung. Allerdings ist HwDeviceExtension ein Zeiger mit Typ PVOID. pDeviceExtension ist der Zeiger auf die Struktur "PDEVICE_EXTENSION". Zeiger nehmen doch bei x86 immer 4Bytes ein ? HwDeviceExtension und pDeviceExtension müßten demnach kompatibel sein ? Ist das der Grund, wieso der Compiler es anstandslos schluckt ? Nochmals herzlichen Dank - da hätte ich mich totsuchen können.
22. August 200817 j Zeiger nehmen doch bei x86 immer 4Bytes ein ?Das hängt weniger von der Architektur als von der Adressbusbreite ab - Es gibt x86-Systeme mit weniger als 32 Bit HwDeviceExtension und pDeviceExtension müßten demnach kompatibel sein ? Ist das der Grund, wieso der Compiler es anstandslos schluckt ?HwDeviceExtension ist vermutlich ein void-Zeiger. In C ist ein void-Zeiger implizit in jeden anderen Zeigertyp konvertierbar. In C++ übrigens nicht - da ist der Cast notwendig, die zweite Zeile lässt sich in C++ nicht kompilieren, wenn HwDeviceExtension ein void* ist.
22. August 200817 j Danke - ein wertvoller Tip. Ich habe von Anfang an in den Projekteigenschaften von Visual Studio angegeben, daß der Compiler C Code kompilieren soll.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.