Tregistry Writebinarydata и Readbinarydata

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем omezik, 6 июл 2009.

  1. omezik

    omezik Гость

    Нужно считать а потом записать данные из реестра с помощью TRegistry и методами WriteBinaryData(значение, буфер, кол-во символов в буфере) и ReadBinaryData (значение, буфер, кол-во символов в буфере)
    Написал две функций:

    Код (Text):
    //Функция для считывание бинарных значений из реестра (передать переменные с путем и параметром реестра)
    int reg_reading_bin(AnsiString root, AnsiString dur, AnsiString name)
    { TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
    // выбираем нужный корень
    reg->RootKey = GetPViodFromStrKey(root);
    // открываем секцию
    reg->OpenKey(dur.c_str(), true);
    // Если ветка существует, то
    if (reg->ValueExists(name))
    {
    int znachenie;
    int binarydat;
    reg->ReadBinaryData(name, &binarydat,sizeof(DWord));
    znachenie = binarydat;
    // закрываем секцию
    //reg->CloseKey();
    //Возвращаем значение функций
    return (znachenie);}
    }


    //Функция для сохранения бинарных значений из реестра (передать переменные с путем и параметром реестра)
    DWord reg_save_bin(AnsiString root, AnsiString dur, AnsiString name, AnsiString znachenie)
    { TRegistry *reg = new TRegistry(KEY_ALL_ACCESS);
    // выбираем нужный корень
    reg->RootKey = GetPViodFromStrKey(root);
    // открываем секцию
    reg->OpenKey(dur.c_str(), true);
    // Если ветка существует, то
    if (reg->ValueExists(name))
    {
    DWord binarydat = znachenie[1];
    reg->WriteBinaryData(name, &binarydat,sizeof(DWord));
    //Возвращаем значение функций
    return (binarydat);}
    }
    вызываю и записываю следующими деиствиями
    Код (Text):
    //запись
    AnsiString a25 = "HKEY_LOCAL_MACHINE";
    AnsiString b25 = "SYSTEM\\CurrentControlSet\\Control\\FileSystem\\CDFS";
    AnsiString c25 = "CacheSize";
    int d25;
    bool e25;
    e25 = CheckBox25->Checked;
    if (e25 == true) {d25 = 00;} else {d25 = 0;}
    reg_save_bin (a25,b25,c25,d25);

    //чтение
    AnsiString a25 = "HKEY_LOCAL_MACHINE";
    AnsiString b25 = "SYSTEM\\CurrentControlSet\\Control\\FileSystem\\CDFS";
    AnsiString c25 = "CacheSize";
    AnsiString t25;
    t25 = reg_reading_bin (a25,b25,c25);
    ShowMessage (t25);
    Не пойму как правильно сделать, полученный результат чтения из реестра присваиваю переменной и пытаюсь опять записать тудаже было например ff 00 00 00 после чтения присвоился результат 255 его записываю а получаю 35 00 00 00 в реестре в чем дело помогите если кто понимает в этом лутше меня может я буфер не правильно использую, заранее спасибо за помощь!
     
  2. omezik

    omezik Гость

    Блин написал на трех сайтах ни кто помочь не может неужели ни кто не сталкивался с такой проблемой
     

Поделиться этой страницей