SetupDiGetClassDevs funktioniert nicht!



  • Hallo!

    Kann mir bitte jemand sagen was die Ursache für die Fehlermeldung ist?

    BOOL main()
    {
    HDEVINFO info = SetupDiGetClassDevs(NULL,NULL,NULL,DIGCF_PRESENT);
     return TRUE;
    }
    

    --------------------Konfiguration: d - Win32 Debug--------------------
    dv.obj : error LNK2001: Nichtaufgeloestes externes Symbol__imp__SetupDiGetClassDevsA@16

    Debug/d.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.
    d.exe - 2 Fehler, 0 Warnung(en)

    ich bin für jeden Hinweis dankbar. gruß WEIGERD



  • Hast du die entsprechenden Libs des WDKs gelinkt?



  • Ich habe "setupapi.h includet".
    Sollte das nicht reichen?



  • Include:

    #include <setupapi.h>
    #include <devguid.h>
    

    Der Fehlermeldung nach fehlt offensichtlich eine Library für den Linker.
    Da Du uns nicht verraten hast, welche Entwicklungsumgebung Du verwendest: Grundsätzlich muß sichergestellt sein, daß sowohl der Compiler als auch der Linker entweder beide auf ANSI oder beide auf Unicode eingestellt sein.

    Du benötigst die setupapi.dll, welche die SetupDiGetClassDevsA() enthält.
    Als Bibliothek wahrscheinlich "advapi32.lib", in den Linker-Einstellungen eintragen. Kannst auch alternativ im Quellcode folgende Zeile einfügen:

    #pragma comment(lib, "advapi32.lib")
    

    Ich stelle fest, daß die Dokumentation im Web nicht gerade aufschlußreich ist, welche Bibliothek man denn nun einbinden muß.
    Falls "advapi32.lib" nicht die Lösung ist:
    Da ich auch SetupDiGetClassDevs() verwende, muß sie in einer der folgenden Bibliotheken enthalten sein (ausprobieren bzw. vergleichen):

    kernel32.lib
    user32.lib
    gdi32.lib
    winspool.lib
    comdlg32.lib
    advapi32.lib
    shell32.lib
    ole32.lib
    oleaut32.lib
    uuid.lib
    odbc32.lib
    odbccp32.lib

    Ansonsten:
    "How to enumerate hardware devices by using SetupDi calls"
    http://support.microsoft.com/kb/259695
    (hat nix mit obiger Fehlermeldung zu tun, nur zur Info)

    HTH,
    Martin



  • Also meine IDE ist eine Autoren Edition von MS Visual C++ 6.0.
    Und das erzeugte Projekt ist ene "leere Win32-Konsolen Anwendung".

    Ich habe nun die lib´s gecheckt,.. sind eigentlich alle da.
    Und in den Compiler Einstellungen sind sie auch alle aufgelistet sogar alle
    zwimal. Muß das so sein?
    Allerdings finde ich weder bei den Compiler -noch bei den Linker Einstellungen eine Möglichkeit von ANSI auf UNICODE umzuschalten, )oder eben andersrum).

    [cpp]
    #pragma comment(lib, "advapi32.lib")
    [/]
    habe ich auch versucht. Hat aber nichts gebracht.
    Wie kann ich den feststellen ob eine lib. die gewünschte Funktion beinhaltet?.



  • Oje, mir fällt gerade ein, daß ich die SetupAPI-Funktionen per LoadLibrary( setupapi.dll ) "einbinde". Also nicht direkt per Lib-Include.

    Vielleicht hast Geduld, bis ich heute abend zuhause meine Kiste anwerfen kann, um nachzusehen, ok?

    Und was Unicode betrifft:
    Unter Visual C++ 6 war ANSI die Standardeinstellung (erkennbar an dem Parameter _MBCS)
    Im Gegensatz dazu sind bei VS2008 und VS2005 die Standardeinstellung Unicode! (erkennbar an den Parametern _UNICODE und UNICODE)

    Martin



  • AHA danke! _MBCS in den Projekteinstellungen gefunden. 🙂

    Da "_MBCS" in den Projekteinstellungen enthalten ist, nehme ich an das es sowohl für den Compiler als auch für den Linker zutrifft und daher auch keine Probleme verursachen kann oder?

    Bis dann



  • WEIGERD schrieb:

    Da "_MBCS" in den Projekteinstellungen enthalten ist, nehme ich an das es sowohl für den Compiler als auch für den Linker zutrifft und daher auch keine Probleme verursachen kann oder?

    So ist es 👍

    Mittlerweile habe ich in einem anderen Projektfile (VS2005) einen entsprechenden Eintrag gefunden: "setupapi.lib"
    Auf diesen Namen der Bibliothek hätten wir eigentlich auch ohne Recherche draufkommen müssen 🙄

    Ich denke mal, das ist es was in Deinen Linker-Einstellungen fehlt
    (wenn schon dann sowohl in der Debug- als auch in der Release-Version eintragen)

    Martin



  • Hurra Hurra!! "0 Fehler 0 Warnungen", nun scheint wieder die Sonne 🙂
    setupapi.lib kommt ins Lagzeitgedächtnis.

    Vielen Dank Martin
    Vielen Dank Melan


Anmelden zum Antworten