在使用SetupDiGetClassDevs ()函数中遇到问题函数返回值始终是INVALID_HANDLE_VALUE
结果是GetLastError();返回122
CString c;
CString 串口::串口函数1()
{
HWND hand = NULL;
HDEVINFO shebei;
shebei = SetupDiGetClassDevs(NULL, L"USB",hand , DIGCF_PRESENT);
if (shebei == INVALID_HANDLE_VALUE) {
c = { "没有成功" };
DWORD error;
error = GetLastError();
c.Format(_T("% u"), error);
return c;
}
else
{
c = { "成功了0" };
return c;
}
}
【以下回答由 GPT 生成】
问题的原因是调用SetupDiGetClassDevs函数时的参数设置有问题。根据微软官方文档,第三个参数hand应该是一个指向窗口的句柄,而不是一个空指针。因此,需要传递一个有效的窗口句柄给该函数。
以下是修改后的代码示例:
#include <windows.h>
#include <setupapi.h>
#include <iostream>
#pragma comment(lib, "setupapi.lib")
CString 串口::串口函数1()
{
HWND hand = GetDesktopWindow(); // 获取一个有效的窗口句柄
HDEVINFO shebei;
shebei = SetupDiGetClassDevs(NULL, L"USB", hand, DIGCF_PRESENT);
if (shebei == INVALID_HANDLE_VALUE) {
DWORD error = GetLastError();
CString errorMsg;
errorMsg.Format(_T("SetupDiGetClassDevs failed with error code %u"), error);
return errorMsg;
}
else {
return _T("成功了0");
}
}
这样就能够正确调用SetupDiGetClassDevs函数并避免返回INVALID_HANDLE_VALUE和GetLastError()返回122的问题。
请注意,上述代码中需要包含<windows.h>
和<setupapi.h>
头文件,并链接到setupapi.lib
库文件。此外,还需要定义GetDesktopWindow()
来获取有效的窗口句柄。