Winapi 函数的作用是:返回不同的值

Winapi 函数的作用是:返回不同的值,winapi,mfc,registry,Winapi,Mfc,Registry,在RegQueryInfoKey函数中,它将错误结果放入dwcValues、dwcMaxValueName和dwcMaxValueData值中。 dwcValues是连接了多少个端口,但它还有一个计数,即使没有连接 例如,当未连接任何内容时,它显示dwcValues=1,dwcMaxValueName=17,dwcMaxValueData=10 如果连接了一个端口,则显示dwcValues=2,dwcMaxValueName=17,dwcMaxValueData=10 我想知道为什么会这样,并解

RegQueryInfoKey函数中,它将错误结果放入dwcValuesdwcMaxValueNamedwcMaxValueData值中。 dwcValues是连接了多少个端口,但它还有一个计数,即使没有连接

例如,当未连接任何内容时,它显示dwcValues=1,dwcMaxValueName=17,dwcMaxValueData=10

如果连接了一个端口,则显示dwcValues=2,dwcMaxValueName=17,dwcMaxValueData=10

我想知道为什么会这样,并解决这个问题

CString CSerialPort::GetPortName()
{
    DWORD dwcSubKeys,dwcValues,dwcMaxSubKeyName,dwcMaxValueName,dwcMaxValueData;
    dwcSubKeys=dwcValues=dwcMaxSubKeyName=dwcMaxValueName=dwcMaxValueData=0;
    DWORD dwSubKeyIndex = 0;
    DWORD dwValueIndex = 0;
    HKEY hKey = 0;
    LONG lStatus = ERROR_SUCCESS;

    TCHAR szValueName[255] = {0};
    TCHAR szValueData[255] = {0};

    lStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\DEVICEMAP\\SERIALCOMM"),0,KEY_READ,&hKey);

    if (lStatus == ERROR_SUCCESS) {
        RegQueryInfoKey(hKey, NULL, NULL, 0,
            &dwcSubKeys, &dwcMaxSubKeyName, NULL,
            &dwcValues, &dwcMaxValueName, &dwcMaxValueData,
             NULL, NULL);

        if (dwcValues != 0) {
            do {
                DWORD dwcValueName = sizeof(szValueName);
                DWORD dwcValueData = sizeof(szValueData);
                lStatus = RegEnumValue(hKey, dwValueIndex,
                        szValueName, &dwcValueName,
                        NULL, NULL,
                        (BYTE*)szValueData,
                        &dwcValueData);
                dwValueIndex++;
            } while (lStatus == ERROR_SUCCESS);
        }
        RegCloseKey(hKey);
    }
    return szValueData;
}

你忘记计算默认(未命名)值了吗?@RaymondChen你指的是哪一个?我在开始时将dwcValues设置为默认值(0)。每个注册表项都有一个未命名的值,在RegEdit中称为“(默认)”。这是对诸如“\Device\Serial0”等命名值的补充。@RaymondChen在我的计算机中,当没有任何连接时,DWC值为0。但在另一台计算机上,即使未连接任何设备,该值也为1。可能有人删除了您计算机上的(默认)值。但是默认情况下它就在那里。