Problem mit sizeof()
-
Hallo,
ich hab folgendes Problem mit dieser Funktion. Wenn ich diese Funktion aufrufe...bekomme ich NUll. Setze ich mal aus Spaß anstatt "sizeof(pdg)" einfach "2048" dann gibt die Funktion den korrekten Wert zurück aber leider auch einen Progabsturz. Irgendwie bin ich Betriebsblind..weiss jemand wo das Problem mit der Buffergröße liegt?
BOOL GetDriveGeometry(GET_MEDIA_TYPES *pdg) { HANDLE hDevice; // handle to the drive to be examined int bResult; // results flag DWORD junk; // discard results hDevice = CreateFile( "\\\\.\\E:", // assume d: is my cdrom drive GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive { //MessageBox("Fehler"); return FALSE; } bResult = DeviceIoControl(hDevice, // device to be queried IOCTL_STORAGE_GET_MEDIA_TYPES_EX, // operation to perform NULL, 0, // no input buffer pdg, sizeof(*pdg), //sizeof(pdg) output buffer &junk, // # bytes returned NULL); // synchronous I/O CloseHandle(hDevice); return TRUE; }
Gruß
Ocrana
-
Vielleicht sizeof(*pdg)... Steh im Moment auch auf dem Schlauch
-
Hallo,
auch schon probiert..nigs
Ocrana
-
sizeof() funktioniert nur bei Stack-Variablen, benutz einfach sizeof(GET_MEDIA_TYPES)
-
Hallo,
funktioniert auch net.
Und den Aufruf sizeof(*pdg) habe ich übrigens aus der MSDN...sollte daher eigentlich richtig sein? Aber irgendwo harkt das Ding...
OCrana
-
Die Funktion rufe ich übrigens hier auf:
int CDrvListBox::MachTemp() { GET_MEDIA_TYPES pdg; BOOL bResult; bResult = GetDriveGeometry (&pdg); }
Ocrana
-
Kann der Fehler nicht auch woanders liegen??? Vielleicht beim holen von hDevice???
-
!!!Du musst pdg vorerst einmal initialisieren!!!
In der Struktur muss stehen, für wieviele Elemente eine Antwort von DeviceIoControl erwartet wird!