undeclared identifier trotz eingebundener Header datei?



  • Hallo, bekomme immer den Fehler _dos_getdrive ist ein undeclared identifier. habe aber eigentlich alle bibliotheken eingebunden, dos_getdrive steht meines wissens nach in der dos.h

    #include "stdafx.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <dos.h>
    
    int main(void) 
    {
    	unsigned d;
    
    	_dos_getdrive(&d);
    	printf("Das aktuelle LW ist: %c\n", d);
    
    	return 0;
    }
    

    Stimmt da was nicht oder übersehe ich da was?

    Vielen Dank schonmal

    MfG
    HST



  • Kann den Code vielleicht mal jemand bei sich testen. Ich arbeite mit Win XP SP2 und nutze MS Visual c++

    Komme absolut nicht weiter und habe schon sehr viel allein probiert und gesucht.
    Vielen Dank



  • Hi!
    Check this out:

    #include <direct.h> // int _getdrive()
    int main ()
    {
    	// int _getdrive()
    	// 1 = A, 2 = B, usw.
    	printf( "The current drive is %c: ", _getdrive() + 'A' - 1 );
    	return 0;
    }
    

    In der MSDN kannst du die Funktionen nachlesen. Eine _dos_getdrive gibts in meiner ( schon recht antiquierten ) MSDN nicht.



  • Klasse! Hab hier nach den Vorlesungsmaterialien meines Profs gearbeitet..
    Da steht das noch so drin obwohl wir in der uni auch Visual C++ 6.0 verwenden

    Und dafür Quäl ich mich nun das halbe Wochenende um wiedermal veralteten mist beigebracht bekommen zu haben: 😞

    Aber vielen Dank Big Brother
    Warst mir die einzige Hilfe

    Bis bald und viele Grüße
    HST



  • Dein Prof hat Recht:

    Synopsis:
    
    #include <dos.h>
    void _dos_getdrive( unsigned *drive );
    
    Description:
    
    The _dos_getdrive function uses system call 0x19 to get the current disk drive number.  The current disk drive number is returned in the word pointed to by drive.  A value of 1 is drive A, 2 is drive B, 3 is drive C, etc.
    
    Returns:
    
    The _dos_getdrive function has no return value.
    
    See Also:
    
    _dos_getdiskfree, _dos_setdrive, _getdiskfree, _getdrive
    
    Example:
    
    #include <stdio.h>
    #include <dos.h>
    
    void main()
      {
        unsigned drive;
    
        _dos_getdrive( &drive );
        printf( "The current drive is %c\n",
                    'A' + drive - 1 );
      }
    
    produces the following:
    
    The current drive is C
    
    Classification:
    
    DOS
    
    Systems:
    
    DOS, Windows, Win386, Win32, OS/2 1.x(all), OS/2-32, DOS/PM
    


  • Wenn er recht hat, warum läuft es dann nicht bei mir?
    Und in der MSDN kannst Du nach _dos_getdrive suchen, findest aber nur ein artikel in dem steht das die befehle gegen andere ausgetauscht wurden.

    😕



  • Kann ich Dir nicht beantworten.

    Sollte M$ das geändert haben, dann nimm halt die neue Funktion.
    Oder getcwd(). Oder getdrive(). Oder GetCurrentDirectory(). Oder ein Manual 🙂



  • Scheppertreiber schrieb:

    DOS, Windows, Win386, Win32, OS/2 1.x(all), OS/2-32, DOS/PM
    

    Hunter S Thompson schrieb:

    Ich arbeite mit Win XP SP2



  • LordJaxom_lg schrieb:

    Scheppertreiber schrieb:

    DOS, Windows, Win386, Win32, OS/2 1.x(all), OS/2-32, DOS/PM
    

    Hunter S Thompson schrieb:

    Ich arbeite mit Win XP SP2

    Kristallkugel putzen ?



  • Ist nicht klar was ich meinte? Ich meinte: Win XP taucht nicht in der Liste unterstützter Betriebssysteme auf, die Funktion gibt's also unter XP nicht (mehr).



  • Du meinst Win32, latürnich gibt's das ...



  • alles klar, das ist wie ich es vermutete.
    Kann mir jetzt noch einer sagen ob GetCurrentDirectory auch auf alten systemen läuft?



  • Zumindest unter Windoof ...



  • Alles klar, Vielen Dank für die Hilfe, da mach ich es jetzt einfach mit den neuen in der MSDN beschriebenen Funktionen, damit müsste es dann überall laufen wo es soll.

    MfG
    HST
    🕶



  • Scheppertreiber schrieb:

    Du meinst Win32, latürnich gibt's das ...

    Angesichts dessen, was sonst in der Liste vertreten ist, bezweifle ich, dass Win32 XP mit einschließt.



  • LordJaxom schrieb:

    Scheppertreiber schrieb:

    Du meinst Win32, latürnich gibt's das ...

    Angesichts dessen, was sonst in der Liste vertreten ist, bezweifle ich, dass Win32 XP mit einschließt.

    gemeint ist vielleicht die 16-bit emulation unter windose. ihr wisst schon, NTVDM, WoW und so...
    🙂



  • Unsinn, deshalb heißt es Win32 ?



  • allein schon das hier:

    The _dos_getdrive function uses system call 0x19

    sieht irgendwie gar nicht nach win32 aus.
    🙂



  • Kein Grund, daß es nicht funktioniert. Windows ist doch abwärtskompatibel ...



  • Scheppertreiber schrieb:

    Kein Grund, daß es nicht funktioniert. Windows ist doch abwärtskompatibel ...

    man kann aus'm windoze-usermode keine bios-calls machen. sowas ähnliches geht in der NTVDM. aber auch nur emuliert.
    🙂


Log in to reply