2014-11-02 17 views
0

DirectInput에서 조이스틱을 열거하려고합니다.'EnumDevices': 'IDirectInput8A'의 멤버가 아닙니다.

unsigned int GetCount() 
{ 
    unsigned int counter; 
    LPDIRECTINPUT8 di; 
    HRESULT hr; 

    counter = 0; 
    di = NULL; 

    if (SUCCEEDED(hr = DirectInput8Create(GetModuleHandle(NULL), 
              DIRECTINPUT_VERSION, 
              IID_IDirectInput8, 
              (VOID**)&di, NULL))) 
    { 
     di->EnumDevices(DI8DEVCLASS_GAMECTRL, countCallback, &counter, DIEDFL_ATTACHEDONLY); 
    } 

    return counter; 
} 

FYI - 이것은 C 컴파일러를 사용하여 C 파일에 있습니다.

나는이 호기심 많은 오류가 나타납니다.

error C2039: 'EnumDevices' : is not a member of 'IDirectInput8A' 
error C2440: 'function' : cannot convert from 'const GUID' to 'const IID *const ' 

첫 번째 두 번째 DirectInput8CreateIID_IDirectInput8에 참조된다 di->EnumDevices...

시작 라인을 참조한다.

나는 그것이 중요한지 확인하기 위해 유니 코드 설정으로 놀아 보았습니다. 아니.

매우 기본적인 것 같습니다.

+0

[DirectInput 샘플] (https://code.msdn.microsoft.com/windowsdesktop/DirectInput-Samples-8ac6f5e3)을 참조하십시오. n MSDN 코드 갤러리. –

답변

0

직접 해결했습니다. 그것은 C가 아니라 C++이기 때문에

, 우리는 상단에이 모두를 선언해야합니다

#define CINTERFACE 
#define INITGUID 
#define DIRECTINPUT_VERSION 0x0800 
#include <dinput.h> 
#pragma comment (lib, "dinput8.lib") 

이를 DirectInput8Create에 :

&IID_IDirectInput8, 

이를 열거 라인 :

di->lpVtbl->EnumDevices(di, DI8DEVCLASS_GAMECTRL, deviceCountCallback, &count, DIEDFL_ATTACHEDONLY); 
0

IDirectInput8A는 클래스이므로 어디에 선언합니까? 선언 붙여 넣기 복사 할 수 있습니까? 그것이 클래스라면 EnumDevices를 멤버로 추가해야합니다.

+0

지금은 명확한 설명을 요청하기 때문에 주석으로 더 적합합니다. – Werner

+0

@Mast - 'LPDIRECTINPUT8 di' 라인을 참조하십시오. 그것은 수업이 아닙니다. 함수 포인터가있는 구조체 – 010110110101

+0

또한 C 언어로 코딩한다고합니다. – 010110110101