使用CompareObjectHandles函数时遇LNK2019未解析外部符号问题求助
你遇到的__imp_CompareObjectHandles未解析外部符号问题,在已经包含<handleapi.h>并链接kernel32.lib的情况下,通常由以下几个原因导致,对应解决方法如下:
检查Windows SDK版本:
CompareObjectHandles是Windows 10 1703版本(SDK版本10.0.15063.0)才新增的API。如果你的项目使用的SDK版本低于这个,编译器找不到该函数的定义。需要在项目属性的「常规」选项卡中,将「Windows SDK版本」设置为1703或更高版本。定义正确的Windows版本宏:由于该API属于较新的Windows特性,需要在代码开头或项目预处理器定义中添加
_WIN32_WINNT宏,指定至少为Windows 10的版本值:#define _WIN32_WINNT 0x0A00 // 对应Windows 10 #include <handleapi.h>或者在项目属性的「C/C++ -> 预处理器 -> 预处理器定义」里添加
_WIN32_WINNT=0x0A00。确认函数名拼写与大小写:确保代码中调用的是
CompareObjectHandles,Windows API是大小写敏感的,拼写错误会导致链接器找不到符号。手动添加kernel32.lib到依赖项:有时候
#pragma comment(lib, "kernel32.lib")可能因为项目设置被忽略,可直接在项目属性的「链接器 -> 输入 -> 附加依赖项」中添加kernel32.lib,强制链接该库。升级平台工具集:如果使用的是较旧的Visual Studio平台工具集(比如v140及更早),可能无法正确链接到包含新API的
kernel32.lib版本。可以在项目属性的「常规」选项卡中,将「平台工具集」升级到v142或更高版本。
内容的提问来源于stack exchange,提问作者anitarazafi

