Problem mit der dinput.dll



  • hi
    Ich will DirectInput 8 benutzen. Dazu hab ich mir ne Komponente zusammen gereimt, die sich auch Problemlos kompillieren lässt. Nur beim Ausführen gibt er mir die Nachricht "Der Prozedureinsprungpunkt 'c_dfDIMouse2' wurde in der DLL 'dinput.dll' nicht gefunden.". Ich hab DirectX 9.0b installiert und sonst laufen alle Spiele ohne Probleme. Hat jemand n schlauen Rat für mich ?

    THX



  • So 'nen ähnlichen Thread gab es hier erst vor einiger Zeit, einfach mal die Suche benutzen.
    Ansonsten, prüfe ob du alle benötigten Libs mit eingebunden hast (dinput8.lib,
    dxguid.lib, etc.).



  • groovemaster2002 schrieb:

    So 'nen ähnlichen Thread gab es hier erst vor einiger Zeit, einfach mal die Suche benutzen.
    Ansonsten, prüfe ob du alle benötigten Libs mit eingebunden hast (dinput8.lib,
    dxguid.lib, etc.).

    Was hast das damit zu tun?
    Ich würde eher die DLLs neuinstallieren.



  • interpreter schrieb:

    Was hast das damit zu tun?

    Ganz einfach, wenn du die falschen Libs mitlinkst, werden halt auch die falschen DLL's benutzt. 😉
    Und da JuGL von einem Fehler mit dinput.dll gesprochen hat, gehe ich davon aus, dass er mit den falschen Libs gelinkt hat, denn es müsste eigentlich dinput8.dll sein.



  • Danke danke
    ich kanns im moment noch nich ausprobieren, weil ich meinen Rechner komplett neu machen musste (dumme Viren). Jez muss ich erstmal alles neuinstallieren.
    Ich hab mir auch gedacht, dass ich vielleicht n paar Libs zuviel hab.



  • Schade schade 😞
    Ich weiß noch nich ob das Prob jez gelöst ist, weil ich n anderen Fehler hab:
    "raLogfile.cpp | ...raLogfile.o(.bss+0x0) | multiple definition of `QACONTAINERFLAGS' "
    Weiß jemand was dieses "QACONTAINERFLAGS" heißt und wie man es los wird ?



  • QACONTAINERFLAGS ist ein enum in OCIdl.h. Keine Ahnung was das mit der ganzen Sache zu tun hat. 😕
    Der Fehler besagt einfach, dass mehrere Definitionen dafür vorhanden sind und dies nicht erlaubt ist ( ➡ ODR). Dafür kann es verschiedene Gründe geben.
    Da QACONTAINERFLAGS ein typedef ist, gehe ich mal davon aus, dass du Compilerfehler hast. Und das irritiert mich. Vorher konntest du doch kompilieren. Kann beim Neuaufsetzen deines Systems irgendwas schief gegangen sein?

    btw: Poste mal alle deine Libs mit denen du linkst.



  • Das sag ich alles meinem linker:
    --no-export-all-symbols --add-stdcall-alias
    -ldinput8 -ld3dx9d -ld3d9
    -ldxguid -lwinmm -lgdi32 -lole32
    ../../../../../Programme/Dev-Cpp/lib/dsound.lib
    ../../../../../Programme/Dev-Cpp/lib/dinput.lib

    dinput8 und dinput brauch ich beide !
    Und da is noch ne andere Fehlermeldung:
    "Warning | ...\Warning | .drectve `%.*s' unrecognized"

    Auch und nebenbei: bei Dev-C++ is n DirectX Tutorial dabei, das auch DInput benutzt und es funktioniert 😕



  • Wieso brauchst Du sowohl dinput8 als auch dinput?? 😕



  • Weil ich DInput8 für DirectInput8Create und DInput für c_dfDIKeyboard u.ä. brauch.



  • Schau Dir doch bitte mal ein Sample an:

    Du inkludierst z.B.

    #define STRICT
    #define DIRECTINPUT_VERSION 0x0800
    
    #include <windows.h>
    #include <dinput.h>
    #include "resource.h"
    

    Und da Du Version 8 gesetzt hast, linkst Du gegen dinput8.lib.



  • Wenn ich "#define DIRECTINPUT_VERSION 0x0800" schreib verhinder ich, dass man dinput8 linken kann ? Hab ich dich da richtig verstanden ? Ich bin nämlich nich gerade der C++Experte.
    Nochmal zuück zu dem QACONTAINERFLAGS Problem: Was kann ich dageben machen ? Muss ich da n paar Compiler-Optionen ändern oder so ? ODer soll ich Dev-C++ neu installiern ?
    Und diese komische Warnung, hat die vielleicht was mit der sache zu tun ?



  • Dein Problem ist einfach, dass du dinput.lib und dinput8.lib nicht gleichzeitung linken kannst. Da dinput.lib 'ne Vorgängerversion ist, kommt es zu Inkonsistenzen. Benutze einfach dinput8.lib und fertig. Die hat alles was du brauchst, auch c_dfDIKeyboard uä.



  • Ich weiß nicht wie ,aber irgendwie hab ichs geschafft !?!?!
    Mit beiden Libs.
    Das QACONTAINERFLAGS Problem hab ich auch irgendwie gelöst. Dumm is nur, dass es immer wieder kommt wenn ich ne neue Datei zum Projekt hinzufüge. Da muss ich jedes mal raten was ich da gemacht hab. Hat da jemand ne Erklärung ?



  • JuGL schrieb:

    Ich weiß nicht wie ,aber irgendwie hab ichs geschafft !?!?!
    Mit beiden Libs.
    Das QACONTAINERFLAGS Problem hab ich auch irgendwie gelöst. Dumm is nur, dass es immer wieder kommt wenn ich ne neue Datei zum Projekt hinzufüge. Da muss ich jedes mal raten was ich da gemacht hab. Hat da jemand ne Erklärung ?

    Ohne Deinen Source wohl kaum... Aber bitte poste ihn hier nicht!! 😉



  • JuGL schrieb:

    Ich weiß nicht wie ,aber irgendwie hab ichs geschafft !?!?!
    Mit beiden Libs.

    Ich hab das Gefühl, du willst einfach nicht hören. Mehrere User haben dir schon mehrfach erklärt, was du falsch machst. Und trotzdem machst du's immer wieder so. Wenn du nicht auf uns hören willst, dann vielleicht auf die DirectX Doku.

    To create a DirectX 8.x interface with the DirectX 9.0 software development kit (SDK) without using CoCreateInstance :

    Set "#define DIRECTINPUT_VERSION 0x0800" before the include statement for Dinput8.h.
    Call DirectInput8Create instead of DirectInputCreateEx.
    Link to the Dinput8.lib library instead of Dinput.lib.

    Beide Libs mitzulinken ist schlichtweg falsch.



  • Ich hab schon gemerkt, dass das eigendlich nicht gehen sollte und habs auch NUR mit der dinput8 versucht. Einzige Kuriosität is jedoch, dass bei der dinput8 vom SDK DirectInput8Create fehlt und bei der dinput8 von Dev-C++ fehlen c_dfDIKeyboard usw. 😕 Darum hab ichs jez mit beiden gemacht und es geht !
    Doof is nur dass ich dieses dumme QACONTAINERFLAGS nicht wegbekomme :(.



  • Also das Hauptproblem, was ich bei dir sehe, sind die nichtaufgelösten Symbole. QACONTAINERFLAGS ist wahrscheinlich nur ein Folgefehler. Warum diese Symbole nicht aufgelöst werden können, kann ich dir nicht sagen, da ich das bisher nur mit dem MSC und zugehörigen Libs gemacht hab. Ich wüsste aber nicht, warum das mit Dev-C++ nicht gehen sollte. Trotzdem nochmal ein paar Tips:

    • auf aktuellste DirectX DevPack Version für Dev-C++ prüfen
    • auf aktuellste Windows PlatformSDK Version für Dev-C++ prüfen
    • Lib Include Verzeichnisse prüfen (DirectX Verzeichnis sollte an erster Stelle stehen)
    • Code auf ein Minimalbeispiel reduzieren und nur benötigte Libs mitlinken
    • Forum Suche und google bemühen

    Sollte alles nichts helfen, gäbe es noch die Möglichkeit dinput8.dll dynamisch anstatt statisch zu linken (LoadLibrary und GetProcAddress lassen grüssen). Soweit, denke ich, muss es aber nicht kommen.


Anmelden zum Antworten