繁体   English   中英

DirectInput未解析的外部符号

[英]DirectInput Unresolved External Symbol

这个让我发疯。 我已经尝试了所有我能想到的。 这是DirectInput代码的相关部分。

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

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

当我尝试编译时,出现错误:

函数_WinMain @ 16中引用的未解析的外部符号“ int __stdcall EnumDevicesCallback(struct DIDEVICEINSTANCEA const *,void *)”(?EnumDevicesCallback @@ YGHPBUDIDEVICEINSTANCEA @@ PAX @ Z)。

如您所见,编译器找不到的外部符号与EnumDevicesCallback函数的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

我敢说,罪魁祸首是BOOL CALLBACK EnumDevicesCallback(const DIDEVICEINSTANCE* DeviceInfo, VOID* Context); -该函数可能是C函数,但是您在.cpp文件中将其声明为C ++函数。

而不是这样做,请在声明中包含适当的.h文件,该文件可能已指定了正确的extern

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM