使用ReadProcessMemory时遇到的问题

void CMFCApplication1Dlg::OnBnClickedinto()
{
    DWORD dwProcessId = 0;
    char VB_name[] = "VisualBoyAdvance";
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(pe32);
    HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE)
    {
        MessageBoxW(TEXT("未知错误"), TEXT("错误"), MB_OK);
    }
    BOOL bProcess = Process32First(hProcessSnap, &pe32);
    while (bProcess)
    {
        if (strncmp(pe32.szExeFile, VB_name, 16) == 0)  
        {
            dwProcessId = pe32.th32ProcessID;
            break;
        }
        bProcess = Process32Next(hProcessSnap, &pe32);          //查找下一个进程
    }

    if (dwProcessId == 0)
    {
        MessageBoxW(TEXT("找不到进程"), TEXT("错误"), MB_OK);
    }

    else       //获取进程句柄
    {
        HANDLE gameprocess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
        if (NULL == gameprocess)
        {
            MessageBoxW(TEXT("打开失败"), TEXT("错误"), MB_OK);
        }
        CString strEDIT1;
        int a;
        int addr = 0x020375E0;
        if (ReadProcessMemory(gameprocess, (LPVOID)addr, &a, 2, NULL) == 0)
        {
            MessageBoxW(TEXT("读取失败"), TEXT("错误"), MB_OK);//此处一直读取失败,如何解决?
        }
        else
        {
            strEDIT1.Format(_T("%d"), a);
            SetDlgItemText(IDC_EDIT1, strEDIT1);
        }
    }
}

这是在VS2017上写的代码,前面部分都能正常运行,到ReadProcessMemory就读取失败,我找了好久都没找到原因,这该怎么解决呢?

https://blog.csdn.net/lileiyang12/article/details/13629173