C ++ читает данные значения ключа реестра - PullRequest
2 голосов
/ 12 апреля 2020

Я пытаюсь получить данные значения ключа реестра, но затем я столкнулся с этой ошибкой,
[bcc64 Error] AAP.h (210): недопустимые операнды для двоичного выражения ('const wchar_t *' и ' const wchar_t * ') (также на этом снимке экрана )

Я почти уверен, что сделал что-то не так или поступил неправильно (я новичок в c ++)

HKEY currentKey;
TCHAR name[256];
String loly;
void fivenum()
{
    DWORD dwSize = 1024;
    DWORD dwIdx = 0;
    long result = 0;
    long fivenumberresult = 0;
    result = RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software\\Microsoft"), 0, KEY_ENUMERATE_SUB_KEYS | KEY_QUERY_VALUE | KEY_SET_VALUE, &currentKey);
    if(result != ERROR_SUCCESS)
    {
       // fail
    }
    else
    {
       DWORD indexs = 0;
       fivenumberresult = RegEnumKeyEx(currentKey, indexs, name, &dwSize, NULL, NULL, NULL, NULL);
       if(!fivenumberresult)
       {

        std::wstringstream box_message;
        loly = box_message.str().c_str();
       }
    }
}

String awit;
void reg4()
{

    HKEY hKey = 0;
    wchar_t buf[255];
    DWORD dwBufSize = sizeof(buf);
    awit = _D("");

    const wchar_t* xds = loly.w_str();
    const wchar_t* xd = L"Software\\Microsoft\\" + xds;
    if( RegOpenKeyExW(HKEY_CURRENT_USER,xd,0,KEY_QUERY_VALUE,&hKey) == ERROR_SUCCESS)
    {

       if(RegQueryValueExW(hKey,L"14770",0, 0, (BYTE*)buf, &dwBufSize) == ERROR_SUCCESS)
       {
          std::wstringstream box_messagess;
          for(DWORD i = 0; i < dwBufSize; ++i)
          {
                box_messagess << IntToHex(static_cast<int>(buf[i]), 2).c_str() << _D(",");
          }
          awit = box_messagess.str().c_str();

       }

    }
}

1 Ответ

0 голосов
/ 12 апреля 2020
  • Невозможно добавить указатели:

    const char* s1 = "abc"; // s1 is an address
    const char* s2 = "123"; // s2 is an address
    const char* s3 = s1 + s2; // what is s3? - cannot add two pointers
    
  • Доступны некоторые операции с указателями - читайте об арифметике указателей c. Например:

    const char* p = s1;
    ++p;
    int count = p - s1; // count is 1
    
  • Таким образом, вы не можете объединить две строки c так, как вы пытались: обе xds & L"Software... являются указателями.

  • У меня нет опыта работы с String BCB, но он, вероятно, предоставляет некоторые методы конкатенации или форматирования.

  • Библиотеки BCB, вероятно, уже предоставляют некоторые методы, облегчающие боль работа с реестром Windows.

Вот решение вашей проблемы (читайте о строковых потоках и строках):

std::wstringstream ss;
ss << L"Software\..." << loly.w_str();
std::wstring xd = ss.str();

Добро пожаловать в ТАК и удачи!

...