2014-11-02 96 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

相关问题