VC链接hid.lib出错问题解决方案

写一个HID的客户端小程序,调用了一些HID API,但是链接时出现了奇怪的现象。

尽管我已经把头文件和lib文件加入到了VC的Include和Lib目录中,但不管我用VC链接,还是在DDK环境下链接,都会提示如下的错误

1>E:\WINDDK\3790.1830\lib\wnet\i386\BufferOverflowU.lib
1>E:\WINDDK\3790.1830\lib\crt\i386\libc.lib
1>E:\WINDDK\3790.1830\lib\wnet\i386\advapi32.lib
1>E:\WINDDK\3790.1830\lib\wnet\i386\kernel32.lib
1>E:\WINDDK\3790.1830\lib\wnet\i386\hid.lib
1>E:\WINDDK\3790.1830\lib\wnet\i386\setupapi.lib
1>E:\WINDDK\3790.1830\lib\wnet\i386\comdlg32.lib
1>hidtest.obj : error LNK2019: unresolved external symbol "void __stdcall HidD_GetHidGuid(struct _GUID *)" (?HidD_GetHidGuid@@YGXPAU_GUID@@@Z) referenced in function _main
1>objchk_wnet_x86\i386\HidTest.exe : fatal error LNK1120: 1 unresolved externals

明明已经找到了hid.lib,却还是提示找不到函数,这让我很纳闷,找了好久,终于在网上找到了答案:

https://bbs.csdn.net/topics/350115980

问题出在头文件的包含方式上,默认我是这么写的:

#include <windows.h>
#include <setupapi.h>
#include <hidsdi.h>

而实际上得这么写:

#include <windows.h>
#include <setupapi.h>

extern "C" {
#include <hidsdi.h>
};

我猜测是因为这个头文件定义的符号名称是C方式的,如果是按CPP方式的话,可能是因为名称修饰的关系导致找不到对应的函数吧

修改完成后再编译就通过啦!

posted @ 2018-03-21 21:20  黑月教主  阅读(748)  评论(0编辑  收藏  举报