Direct Input initialisieren



  • Hi Leute,

    Ich habe bis jetzt:

    1. #include <dinput.h>
    2. DirectX SDK Dezember Update
    3. Borland spezifische DirectX Libs aus dem Grafik FAQ Thread und eingebunden

    bool Init()
    {
    
       HRESULT hr;
       LPDIRECTINPUT8 g_lpDI;
    
       hr = DirectInput8Create(g_hinst, DIRECTINPUT_VERSION,IID_IDirectInput8, (void**)&g_lpDI, NULL);
    
       if FAILED(hr)
      {
        ShowMessage("No DirectInput 8 interface found");
        return false;
      }
      else
      return true;
    
    }
    

    Warum wirft er überall einen "Call to undefined symbol" Error ??
    Was habe ich vergessen einzubinden ?



  • Seltsamer Fehler... 😕

    Vielleicht gegen die Debug Libs gelinkt, aber die Debug DLLs gar nicht auf'n Rechner installiert?!? 😕



  • Ich hab alles included in die Libs von der russischen Seite eingebunden in das Projekt, trotzdem erkennt er die DirectX bezogenen Methoden und Objekte nicht. Nirgendwo gibts ein verständliches Tut wo erklärt wird wie man Dx9 auf BCB verwenden kann. Was soll ich noch alles Einbinden damit es geht ?

    wenn ich aber im oberen Beispiel "LPDIRECTINPUT" anstatt "LPDIRECTINPUT8" verwende erkennt er zumindest mal etwas. Wer kann mir helfen Dx9 bezogen auf Direct Input auf BcB6.0 zum laufen zu bringen ? Habt tausen Dank !

    Ich brauche nur eine Routine die gedrückte Tasten auf dem Joystick erkennt.



  • Ich habs geschafft 🙂 Er kompiliert. Der include Path und Lib Path in den Projekt Optionen muss mit den BCB spezifischen Dateien an erster Stelle stehen da sonst die alten eingebunden worden -das war das ganze Problem.

    #include <windows.h>
    #define DIRECTINPUT_VERSION 0x0800
    #include <dinput.h>
    
       HINSTANCE  g_hinst;
       HRESULT hr;
       LPDIRECTINPUT8 g_lpDI;
    
    hr=DirectInput8Create(g_hinst,DIRECTINPUT_VERSION,IID_IDirectInput8,(void**)&g_lpDI,NULL);
    
       if FAILED(hr)
      {
         ShowMessage("failed");
      }
    

    Was mache ich aber falsch das er immer "failed" ausgibt ? Ist die Bedingung etwa immer false egal was passiert ? Habe das Beispiel direkt von MSDN



  • Dann schreib' *DU* doch jetzt endlich mal ein Tut für BCB+DX9! 😋 👍

    Debug-Infos angucken oder Fehlercode im Tester testen. 🤡



  • Wie erstelle ich ein Window handle um es an SetCooperativeLevel() zu übergeben ??

    Habe jetzt folgendes:

    void InitDirectInput()
    {
    
        HRESULT hr;
        HWND hDlg;
    
        //---------- Register with the DirectInput subsystem and get a pointer
        if( FAILED( hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION,IID_IDirectInput8, (VOID**)&g_pDI, NULL )))
        ShowMessage("failed to create DirectInput interface");
    
        //-----------Enumerate Devices
        if( FAILED( hr = g_pDI->EnumDevices( DI8DEVCLASS_GAMECTRL,EnumJoysticksCallback,NULL, DIEDFL_ATTACHEDONLY ) ) )
        ShowMessage("failed to enum devices");
    
        // Make sure we got a Joystick
        if( NULL == g_pJoystick )
        {
            MessageBox( NULL, TEXT("Joystick not found. The sample will now exit."),
                        TEXT("DirectInput Sample"),
                        MB_ICONERROR | MB_OK );
            EndDialog( hDlg, 0 );
    
        }
        else
        Form1->Label1->Caption = "Joystick found and initialized";
    
        //------Set the data format for all devices - a predefined data format
        //-------------------------------------------------------------------------
    
        if( FAILED( hr = g_pJoystick->SetDataFormat( &c_dfDIJoystick2 )))
        ShowMessage("failed to set Joystick data format");
    
        //if( FAILED( hr = g_Keyb->SetDataFormat(&c_dfDIKeyboard)))
        //ShowMessage("failed to set Keyboard data format");
    
        //if( FAILED( hr = g_Mouse->SetDataFormat(&c_dfDIMouse2)))
        //ShowMessage("failed to set Keyboard data format");
        //------------------------------------Data Format END
    
        //------- Set Cooperative Level-------------
    
         if(FAILED(hr = g_pJoystick->SetCooperativeLevel( hDlg ,DISCL_NONEXCLUSIVE | DISCL_BACKGROUND )))
         ShowMessage("failed to set cooperative level");
    

    Er gibt immer "failed to set cooperative level" aus, ich vermute es liegt daran das es Probleme mit dem Windowhandle "hDlg" gibt. Wie kann ich das Problem lösen ? kann ich ein handle zur Main so erzeugen ?

    Vielen Dank für eure Hilfe !



  • Natürlich liegt es daran, hDlg wird ja nirgendwo gesetzt und zeigt ins Nirvana.

    Du sollst natürlich das Handle Deines Fensters übergeben!



  • Keinen blassen schimmer wie ich das machen soll ? Kann ich auch meine Form nehmen und das handle übergeben ? Wie ermittel ich das Handle einer Form ? Sorry, bin erst seit gestern mit den Sachen hier zu gange.

    Hat jemand ein Beispiel wie ich ein Window handle im on Create Ereignis meiner Form1 erzeuugen kann ?



  • such mal nach hwnd in TForm(ist ne property), ka ob die genau so heisst, aber der datentyp ist HWND



  • Danke

    HWND hDlg = Form1->Handle;
    

    reicht vollkommen aus


Log in to reply