首页 > 解决方案 > 如何处理这些旧式演员表?

问题描述

我收到了一些我想摆脱的“使用旧式演员表”警告,但我对此知之甚少。

编辑: HKEY_CURRENT_USER确实是在 WinAPI 中定义的,所以我将不理会那个。

(LPBYTE)&result:LPBYTE(&result)reinterpret_cast<LPBYTE>(&result)工作,但我不知道是否是等价的。那么我使用这三个中的哪一个?

(const BYTE*)&value:reinterpret_cast<const BYTE*>(&value)有效,但同样的事情。那么我使用这两个中的哪一个?

更多上下文:

HKEY hKey;
std::string sResult = "";
if(regOpenKey(KEY_READ, &hKey))
{
    DWORD size=1024, type = REG_SZ;
    wchar_t result[MAX_PATH];
    if(RegQueryValueEx(hKey, key, nullptr, &type, (LPBYTE)&result, &size) == ERROR_SUCCESS)
        sResult = str_narrow(result);
}

RegCloseKey(hKey);

和:

HKEY hKey;
if(regOpenKey(KEY_ALL_ACCESS, &hKey))
{
    DWORD value = 1;
    RegSetValueEx(hKey, key, 0, REG_DWORD, (const BYTE*)&value, sizeof(value));
}

RegCloseKey(hKey);

谢谢你的帮助 :)

标签: c++casting

解决方案


HKEY_CURRENT_USER是在 WinAPI 中定义的,所以不要管它。它可能会在没有警告的情况下发生变化(虽然不太可能,但可能)。

(LPBYTE)&result: LPBYTE(&result)有效,但同样,我不知道它是否等效。

是的,它是一样的。

(const BYTE*)&value: reinterpret_cast<const BYTE*>(&value)工作,但同样的事情。

又是一样。


推荐阅读