这个让我发疯。我想尽了一切办法。下面是DirectInput代码的相关部分。

BOOL CALLBACK EnumDevicesCallback(const DIDEVICEINSTANCE* DeviceInfo,   VOID* Context);

if(DirectInput8Interface == DI_OK)
{
  DirectInput8InterfacePointer->EnumDevices(
    DI8DEVCLASS_GAMECTRL,
    (LPDIENUMDEVICESCALLBACKA) EnumDevicesCallback,
    NULL,
    DIEDFL_ATTACHEDONLY);
}

当我试图编译时,我得到错误:
未解析的外部符号“int\u stdcall enumDeviceCallback(struct
DIDEVICEINSTANCEA const*,void*)”
(?枚举设备回调@@YGHPBUDIDEVICEINSTANCEA@@PAX@Z)引用于
函数@16。
如您所见,编译器找不到的外部符号与EnumDeviceCallback函数的DIDEVICEINSTANCE参数有关。不应该这样,因为我已经包含了dinput.h并链接到dinput8.lib和dxguid.lib。我甚至尝试在自己的代码中定义DIDEVICEINSTANCE,得到的消息是它与以前的定义冲突。
那个错误消息意味着什么?

最佳答案

这不是回调的工作方式。
EnumDevicsCallback不是存在的函数。您应该编写自己的函数,该函数EnumDevices将调用每个设备。您的函数不必调用EnumDevicesCallback-这是一个例子。
例如,如果您只想打印每个设备的名称,您可以

BOOL CALLBACK PrintDevicesCallback(const DIDEVICEINSTANCE* DeviceInfo,   VOID* Context)
{
    _tprintf("%s %s\n", DeviceInfo->tszProductName, DeviceInfo->tszProductName);
    return DIENUM_CONTINUE;
}

然后将PrintDevicesCallback传递到EnumDevices

关于c++ - DirectInput未解析的外部符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35071336/

10-11 18:46