在我的应用程序中,我使用RegSetKeyValueA将一些激活密钥存储在注册表中。

RegSetKeyValueA函数是阻止我的应用程序与Windows XP向后兼容的唯一瓶颈。

有什么办法可以解决这个问题?

最佳答案

通过使用Windows 2000中的RegSetKeyValueW可以轻松实现RegSetValueExW功能

LSTATUS MyRegSetKeyValueW(
                        HKEY    hKey,
                        LPCWSTR lpSubKey,
                        LPCWSTR lpValueName,
                        DWORD   dwType,
                        LPCVOID lpData,
                        DWORD   cbData
                        )
{
    LSTATUS s;

    if (lpSubKey && *lpSubKey)
    {
        s = RegCreateKeyExW(hKey, lpSubKey, 0, 0, 0, KEY_SET_VALUE, 0, &hKey, 0);

        if (s != NOERROR)
        {
            return s;
        }
    }

    s = RegSetValueExW(hKey, lpValueName, 0, dwType,
        static_cast<PBYTE>(const_cast<void*>(lpData)), cbData);

    if (lpSubKey && *lpSubKey)
    {
        RegCloseKey(hKey);
    }

    return s;
}


并将自己的代码RegSetKeyValueW替换为MyRegSetKeyValueW。可能会对A版本执行相同的操作,但需要了解A版本会将字符串参数转换为unicode,然后调用W版本。所以总是更好的直接调用W版本

关于c++ - RegSetKeyValueA函数有向后兼容的替代方法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55776182/

10-11 16:46