2014-11-02 78 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; 
} 

僅供參考 - 這是使用C編譯器的c文件。

我得到這些好奇的錯誤。

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

第一種是指的是開始di->EnumDevices...

第二指的是在IID_IDirectInput8DirectInput8Create線。

我玩過UNICODE設置,看看它是否重要。不。

這感覺就像一個非常基本的東西。

+0

您可能想查看[DirectInput samples](https://code.msdn.microsoft.com/windowsdesktop/DirectInput-Samples-8ac6f5e3)o n MSDN代碼庫。 – 2014-11-02 18:38:28

回答

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 2014-11-02 02:27:08

+0

@Mast - 查看線路'LPDIRECTINPUT8 di'。這不是一堂課。它是一個帶有函數指針的結構體 – 010110110101 2014-11-02 13:15:29

+0

另外,我說我在C編碼 - 沒有類。 – 010110110101 2014-11-02 13:26:32