MinGW编译器的GUID使用时,出现类似undefined reference to `GUID_DEVCLASS_PORTS'错误。

最近在写一个串口程序,在编写获取所有串口的程序时,参考网上的资料,用了SetupDiGetClassDevs函数,但是在调用GUID时,总是出现错误:undefinedr... 最近在写一个串口程序,在编写获取所有串口的程序时,参考网上的资料,用了SetupDiGetClassDevs函数,但是在调用GUID时,总是出现错误:undefined reference to `GUID_DEVCLASS_PORTS'。看现象是这个没有定义。
这个程序在Visual 2015上是可以编译通过正常运行的,而且Visual Studio的devguid.h和Mingw的不太一样,Visual Studio的devguid.h文件中直接定义了GUID的值,但是MinGW的头文件中我只找到了声明却没有找到定义。
请问各位大神,MinGW的GUID应该怎么用啊,除了,devguid.h、initguid.h还需要包含什么文件?谢谢。
已解决,MinGW在使用WindowsAPI时除了包含头文件还需要链接库。
GUID需要连接libuuid.a。
展开
 我来答
悠键04
2017-03-22 · 超过68用户采纳过TA的回答
知道答主
回答量:181
采纳率:0%
帮助的人:76.3万
展开全部
如果是系统的标准设备,可以在devguid.h文件中找到所对应的guid值,但如果是其它安装的驱动则可以查看其classguid值(系统设备也可以),如:
USB的guid值可以在注册表路径:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Class/
里面找到值{36fc9e60-c465-11cf-8056-444553540000}
其对应的classguid值为:
{0x36fc9e60L, 0xc465, 0x11cf, 0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
对比下就可以用这两个字符串相互转换了。
devguid.h中设备类型guid的定义:

GUID_DEVCLASS_FDC 软盘控制器
GUID_DEVCLASS_DISPLAY 显示卡
GUID_DEVCLASS_CDROM 光驱
GUID_DEVCLASS_KEYBOARD 键盘
GUID_DEVCLASS_COMPUTER 计算机
GUID_DEVCLASS_SYSTEM 系统
GUID_DEVCLASS_DISKDRIVE 磁盘驱动器
GUID_DEVCLASS_MEDIA 声音、视频和游戏控制器
GUID_DEVCLASS_MODEM MODEM
GUID_DEVCLASS_MOUSE 鼠标和其他指针设备
GUID_DEVCLASS_NET 网络设备
GUID_DEVCLASS_USB 通用串行总线控制器
GUID_DEVCLASS_FLOPPYDISK 软盘驱动器
GUID_DEVCLASS_UNKNOWN 未知设备
GUID_DEVCLASS_SCSIADAPTER SCSI 和 RAID 控制器
GUID_DEVCLASS_HDC IDE ATA/ATAPI 控制器
GUID_DEVCLASS_PORTS 端口(COM 和 LPT)
GUID_DEVCLASS_MONITOR 监视器

对设备管理器的查询
GUID ClassGuid = {0x96e73b6eL, 0x7a5a, 0x11d4, 0x9f, 0x24, 0x00, 0x80, 0xc8, 0x27, 0x27, 0xf4};
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
DWORD i;
CString temp;
CString str;
hDevInfo = SetupDiGetClassDevs((LPGUID) &ClassGuid, 0, 0,DIGCF_PRESENT);
if (hDevInfo == INVALID_HANDLE_VALUE)
{
// Insert error handling here.
return ;
}

// Enumerate through all devices in Set.

DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData);i++)
{
DWORD DataT;
char buffer[2048];
DWORD buffersize =sizeof(buffer);
while (!SetupDiGetDeviceRegistryProperty(
hDevInfo,
&DeviceInfoData,
SPDRP_DEVICEDESC,
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
// Change the buffer size.
//if (buffer) LocalFree(buffer);
//buffer = (PSP_INF_INFORMATION)LocalAlloc(LPTR,buffersize);
}
else
{
// Insert error handling here.
break;
}
}
if (buffer != NULL && i == 0)
{
temp.Format("<光盘驱动器>");
str += temp;
}
temp.Format("<VALUE>%s</VALUE>",buffer);
str += temp;
if (buffer) LocalFree(buffer);
}
if (i != 0)
{
temp.Format("</光盘驱动器>");
str += temp;
}
if ( GetLastError()!=NO_ERROR &&
GetLastError()!=ERROR_NO_MORE_ITEMS )
{
return ;
}
// Cleanup
SetupDiDestroyDeviceInfoList(hDevInfo);
homeclong
2019-09-14
知道答主
回答量:2
采纳率:100%
帮助的人:1538
展开全部
你好 我最近也遇到了 这个问题 不知道怎么解决 能帮助下我吗 麻烦了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式