DirectInput Nicht aufgelöstes Token "IID_DirectInput8W"



  • so ich hoffe ihr könnt mir hier weiterhelfen. ich bekomme beim Compilieren folgende Fehlermeldungen:
    "error LNK2020: Nicht aufgelöstes Token (0A00008A) "IID_DirectInput8W"",
    "error LNK2021: Nicht aufgelöstes externes Symbol "IID_DirectInput8W""
    cpp-Datei

    #include <Dinput.h>
    #pragma comment(lib, "Dinput8.lib")
    //#pragma comment(lib, "dxguid.lib")
    
    #include "DirectInput8.h"
    
    DirectInput8::DirectInput8()
    {
    }
    
    HRESULT DirectInput8::init(HINSTANCE g_hinst)
    {
        HRESULT         hr;
        g_lpDI = NULL;
    
        hr = DirectInput8Create(g_hinst, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&g_lpDI, NULL);
    
        /*if FAILED(hr)
        {
            // DirectInput not available; take appropriate action
        }*/
    
        return S_OK;
    }
    

    h-Datei

    class DirectInput8
    {
        protected:
    
        public:
            LPDIRECTINPUT8          g_lpDI; // DirectInput interface  
    
            DirectInput8::DirectInput8();
            HRESULT DirectInput8::init(HINSTANCE  g_hinst);
    };
    

    so und dann hier noch der include

    // DirectX.cpp: Hauptprojektdatei.
    
    #pragma once
    
    #include <stdafx.h>
    
    #include "DXDateien/DirectInput8.cpp"
    
    #include "Form1.h"
    
    using namespace DirectX;
    
    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
    	// Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
    
    	// Hauptfenster erstellen und ausführen
    	Application::Run(gcnew Form1());
    	return 0;
    }
    

    Also ich hab nu rausfinden können, dass es daran lag, dass ich die cpp-Datei in eine Windows Form Anwendung eingebunden habe, in einer Win32Anwendung ging es ohne Proble. Allerdings würd ich schon gerne Wissen warum dieses Problem auftritt

    hier noch mal die definition von IID_IDirectInput8

    #ifdef UNICODE
    #define IID_IDirectInput8 IID_IDirectInput8W
    #define IDirectInput8 IDirectInput8W
    #define IDirectInput8Vtbl IDirectInput8WVtbl
    #else
    #define IID_IDirectInput8 IID_IDirectInput8A
    #define IDirectInput8 IDirectInput8A
    #define IDirectInput8Vtbl IDirectInput8AVtbl
    #endif
    

    und dann noch IID_IDirectInput8W

    DEFINE_GUID(IID_IDirectInput8W,    0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00);
    


  • so hab die Lösung nun selber rausbekommen, es fehlte einfach ein

    #include <initguid.h>
    

    vor dem einbinden von Dinput.h



  • Ich wüsste an dieser Stelle gerne noch, warum ich initguid.h bei einer Windows-Form anwendung manuell einbinden muss, während ich beim erstellen einer win32 Anwendung auch ohne diesen header keinen Link error bekommen habe.

    Und gibt es noch weitere header die bei einer windows Form anwendung nicht mit eingebunden werden? Ich nutze übrigens Visuel c++ 2008 express



  • wirf malbitte einen Blick auf die KOmmentare der stdafx.h



  • ja aber das bringt mich auch nicht wirklich weiter, es macht keinen Unterschied ob mein include Befehl in der stdafx.h steht oder wie in meinem Fall hinter dem Includ dieser Datei oder willst du auf was anderes hinaus



  • mal so nebenbei, hab jetzt ein neues Problem, jetzt kommt die fehlermeldung
    "error LNK2020: Nicht aufgelöstes Token (0A00006D) c_dfDIKeyboard."
    es handelt sich wieder um eine der vordefinierten konstanten aus <DInput.h>
    und ist wie folgt definiert

    extern const DIDATAFORMAT c_dfDIKeyboard;
    

    ein Stück davor war dann die definition von DIDATAFORMAT

    typedef struct _DIDATAFORMAT {
        DWORD   dwSize;
        DWORD   dwObjSize;
        DWORD   dwFlags;
        DWORD   dwDataSize;
        DWORD   dwNumObjs;
        LPDIOBJECTDATAFORMAT rgodf;
    } DIDATAFORMAT, *LPDIDATAFORMAT;
    typedef const DIDATAFORMAT *LPCDIDATAFORMAT;
    

    ich hoffe das es wieder mit einem einfachen include erledigt ist


Anmelden zum Antworten