[英]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.