首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectInput未解析外部符号

DirectInput未解析外部符号
EN

Stack Overflow用户
提问于 2016-01-28 20:25:35
回答 2查看 347关注 0票数 0

这个快把我逼疯了。我已经试过了我能想到的一切。以下是DirectInput代码的相关部分。

代码语言:javascript
复制
BOOL CALLBACK EnumDevicesCallback(const DIDEVICEINSTANCE* DeviceInfo,   VOID* Context);

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

当我试图编译时,我得到了错误:

未解析的外部符号"int __stdcall EnumDevicesCallback(struct DIDEVICEINSTANCEA *,void *)“在函数_WinMain@16中引用。

如您所见,编译器找不到的外部符号与EnumDevicesCallback函数的DIDEVICEINSTANCE参数相关。不应该是这样,因为我已经包含了dinput.h,并链接到dinput8.lib和dxguid.lib。我甚至尝试在自己的代码中定义DIDEVICEINSTANCE,并得到了一条与先前定义相冲突的消息。

这条错误信息意味着什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-28 20:47:26

这不是回调的工作方式。

EnumDevicsCallback不是一个存在的函数。您应该编写自己的函数,EnumDevices将为每个设备调用该函数。您的函数不必被称为EnumDevicesCallback --这就是一个例子。

例如,如果您只想打印每个设备的名称,则可以编写

代码语言:javascript
复制
BOOL CALLBACK PrintDevicesCallback(const DIDEVICEINSTANCE* DeviceInfo,   VOID* Context)
{
    _tprintf("%s %s\n", DeviceInfo->tszProductName, DeviceInfo->tszProductName);
    return DIENUM_CONTINUE;
}

然后将PrintDevicesCallback传递给EnumDevices

票数 2
EN

Stack Overflow用户

发布于 2016-01-28 20:35:11

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

不是这样做的,而是在声明中包含一个正确的.h文件,该声明很可能指定了正确的extern

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35071336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档