c++ Problem bitte schneller hilfe LESEN :(



  • Hab da ein kleines Problem mit MS Visual C++

    Und das sieht wie folgt aus er wirft mit beim compilieren immer folgende fehlermeldung raus... error C2065: 'DISK_GEOMETRY_EX' : undeclared identifier
    was normalerweise nicht sein kann da ich die benötige header datei schon includet habe:
    ( Requirements
    Client: Included in Windows XP.
    Server: Included in Windows Server 2003.
    Header: Declared in Winioctl.h.)

    Wenn jemand eine lösung dafür hat bitte schnell antworten.. 😃

    Gruss tim



  • Du solltest DISK_GEOMETRY_EX dem Compiler bekannt machen.

    Mal im ernst, hellsehen können wir nicht. Zeig mal etwas Quellcode oder mach ein Minimalbeispiel.



  • Welchen Wert hat _WIN32_WINNT?



  • Hier ist ein Teil der Funktion:
    void HDD_USB(HWND hDlg)
    {
    OSVERSIONINFO lpVersionInfo;
    char szHDD[30];
    HANDLE hHDD = NULL;
    DWORD lpNoB, dwReturnValue;
    BOOL bReturnValue;
    BOOL bFoundOne = FALSE;
    BYTE lpBuffer[512];
    DWORD dwBufferSize = sizeof(DISK_GEOMETRY_EX);
    DWORD lpBytes;
    DWORD dwLastValid;
    BOOL bFoundEnd = FALSE;
    int i32G_valid, i1G_valid, i32M_valid, i1M_valid;
    int i, ikB, iHDD, iMax;
    div_t div_result;
    DISK_GEOMETRY_EX OutBuffer;   
    LONGLONG ll_1 = 1;
    BOOL bValid;
    LARGE_INTEGER li;

    for (iHDD = 0; ((iHDD < 10) && (!bFoundOne)); iHDD++)
    {
    sprintf(szHDD, "\\\.\\physicaldrive%i", iHDD);
    hHDD = CreateFile(szHDD,
    GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, NULL);
    if (hHDD != INVALID_HANDLE_VALUE)
    {
    if (DeviceIoControl(hHDD, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,
    NULL, 0, &OutBuffer, dwBufferSize,
    &lpBytes, NULL))

    {
    dwReturnValue = SetFilePointer(hHDD, 0, NULL, FILE_BEGIN);
    bReturnValue = ReadFile(hHDD, &lpBuffer, 512 &lpNoB, NULL);
    if ((lpBuffer[0] == 'E') && (lpBuffer[1] == 'V'))
    {
    bFoundOne = TRUE;
    }
    }
    }
    }

    }



  • timmaeh schrieb:

    Hier ist ein Teil der Funktion:

    void HDD_USB(HWND hDlg)
    		{
    	OSVERSIONINFO lpVersionInfo;
    	char szHDD[30];
    	HANDLE hHDD = NULL;
    	DWORD lpNoB, dwReturnValue;
    	BOOL bReturnValue;
    	BOOL bFoundOne = FALSE;
    	BYTE lpBuffer[512];
    	DWORD dwBufferSize = sizeof(DISK_GEOMETRY_EX);
    	DWORD lpBytes;
    	DWORD dwLastValid;
    	BOOL bFoundEnd = FALSE;
    	int i32G_valid, i1G_valid, i32M_valid, i1M_valid;
    	int i, ikB, iHDD, iMax;
    	div_t div_result;
    	DISK_GEOMETRY_EX OutBuffer;   
    	LONGLONG ll_1 = 1;
    	BOOL bValid;
    	LARGE_INTEGER li;
    	
    			
    			
    			
    	for (iHDD = 0; ((iHDD < 10) && (!bFoundOne)); iHDD++)
    	    {
    		 sprintf(szHDD, "\\\\.\\physicaldrive%i", iHDD);
    		 hHDD = CreateFile(szHDD,
                           GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
                           NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, NULL);
    		if (hHDD != INVALID_HANDLE_VALUE)
    		{
    			if (DeviceIoControl(hHDD, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,
    										   NULL, 0, &OutBuffer, dwBufferSize,
    										   &lpBytes, NULL))
    
    			{
    				dwReturnValue = SetFilePointer(hHDD, 0, NULL, FILE_BEGIN);
    				bReturnValue = ReadFile(hHDD, &lpBuffer, 512 &lpNoB, NULL);
    				if ((lpBuffer[0] == 'E') && (lpBuffer[1] == 'V'))
    				{
    					bFoundOne = TRUE;
    				}
    			}
    		}
    	}
    		
    		
    }
    

    Daran erkenn ich nu aber nicht welche Header Du einbindest.
    Und Codetags machen das lesen leichter 🤡 (s.o.)



  • @timmaeh:

    Wenn du es so eilig hast, solltest du die angebotene Hilfestellung auch nutzen 🙄

    Ein Blick in die Headerdatei genügt, um zu erkennen, dass die Deklaration der Struktur DISK_GEOMETRY_EX umgeben ist von einem

    #if(_WIN32_WINNT >= 0x0500)
    ...
    #endif

    Wenn also bei dir _WIN32_WINNT nicht mindestens auf 0x500 definiert ist, dann kann das nicht funktionieren.



  • Joar morgens bin ich leider noch nicht so leistungsfähig 😃

    Aber es funzt ja nun 🙂

    Danke nochmal an euch beide


Anmelden zum Antworten