写一个HID的客户端小程序,调用了一些HID API,但是链接时出现了奇怪的现象。
尽管我已经把头文件和lib文件加入到了VC的Include和Lib目录中,但不管我用VC链接,还是在DDK环境下链接,都会提示如下的错误
1>E:WINDDK3790.1830libwneti386BufferOverflowU.lib
1>E:WINDDK3790.1830libcrti386libc.lib
1>E:WINDDK3790.1830libwneti386advapi32.lib
1>E:WINDDK3790.1830libwneti386kernel32.lib
1>E:WINDDK3790.1830libwneti386hid.lib
1>E:WINDDK3790.1830libwneti386setupapi.lib
1>E:WINDDK3790.1830libwneti386comdlg32.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_x86i386HidTest.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方式的话,可能是因为名称修饰的关系导致找不到对应的函数吧
修改完成后再编译就通过啦!