兜了一大圈后,回到原点,再次思索如何解决。
先看上次的结果:“自己定义之后,提示重复链接;不自己定义,包含initguid.h,又提示其他的GUID重复定义;不自己定义,也不包含,提示没有链接到lib。”
此次,再次编译时,我想到一个折衷的办法,既能保证“其他的GUID”不重复定义,又能保证GUID_DEVINTERFACE_USB_DEVICE被定义。如下:
#include <winioctl.h>
#include <setupapi.h>
#include <initguid.h>
DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE,
0xA5DCBF10L, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED);
#define GUID_CLASS_USB_DEVICE GUID_DEVINTERFACE_USB_DEVICE
上述代码的原理很简单。在调用其他的GUID时,即包含 winioctl.h 文件时,不使用INITGUID,外部定义;在调用其他的GUID之后,再包含initguid.h,即,定义INITGUID,此后再定义自己的GUID,就是使用了内部定义。
如此一来,同时使用内部定义和外部定义,完美解决!