ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   re_regedit - простая работа с реестром (https://forum.antichat.xyz/showthread.php?t=1448937)

Receiver 04.09.2022 23:41

What`s up, niggers! Мне понадобился класс для работы с реестром Windows.

Смог найти только древнейший класс от @SR_team: https://www.blast.hk/threads/13855

Код там старый, кривой и не безопасный. Решил написать свой классик, дропаю всем.

Все методы задокументированы, разобраться не составить труда.

Умные разработчики - предлагайте правки кода в теме.

Исходник: https://github.com/Receiver1/re_regedit

Использование:

C++:





[CODE]
// Подробнее на странице GitHub
re
.
openCatalog
(
RegEdit
::
Key
::
KEY_CURRENT_USER
,
"Software\\test-app"
)
;
re
.
setString
(
"access_token"
,
"new-access-token"
)
;
re
.
setUlong
(
"expires_in"
,
123
)
;
std
::
string accessToken
{
re
.
getString
(
"access_token"
)
}
;
std
::
cout


Izvinisb 04.09.2022 23:50

Цитата:

Сообщение от Receiver

Смог найти только древнейший класс от @SR_team: https://www.blast.hk/threads/13855

за пределами бласта не пробовал искать?

kin4stat 05.09.2022 00:00

Говно одним словом.

Как минимум:

Вместо нормальных эксепшенов юзается самописное говно(спасибо хоть за то, что наследовано от
Код:

std::exception
).

А еще это самописное говно полная хуета. Привет от виртуального деструктора.

В чем проблема была заюзать
Код:

std::system_error?
Поехали дальше:

Вместо
Код:

std::string_view
принимается
Код:

const std::string&
Ну и вишенка на торте - уебанский интерфейс. Есть много вариантов сделать нормально, например как у мапы, или как у жсона, но был выбран самый уебский и систайловый.

В чем проблема сделать

C++:





Код:

RegEdit r
;
if
(
auto
it
=
r
.
find
(
)
;
it
!=
r
.
end
(
)
)
{
std
::
visit
(
*
it
,
[
]
(
const
auto
&
value
)
{
using
T
=
std
::
remove_cv_ref_t

;
if
constexpr
(
std
::
is_same_v

)
{
// ...
}
else
if
constexpr
(
std
::
is_same_v

)
{
// ...
}
else
{
// ...
}
}
)
;
}



Или

C++:





Код:

RegEdit r
;
try
{
auto
value
=
r
.
get

(
"key"
)
;
}
catch
(
const
std
::
runtime_error
&
ec
)
{
// wrong type ...
// ... or key not found
}



Или

C++:





Код:

RegEdit r
;
if
(
auto
it
=
r
.
find
(
)
;
it
!=
r
.
end
(
)
)
{
auto
value
=
it
.
get

(
)
;
}



Короче одним словом:

https://forum.antichat.xyz/attachments/28138025/

kin4stat 05.09.2022 00:11

Цитата:

Сообщение от withay

Нашел за 5 секунд по первой ссылке в гугле

GitHub - m4x1m1l14n/Registry: C++ wrapper for manipulating Windows registry

C++ wrapper for manipulating Windows registry. Contribute to m4x1m1l14n/Registry development by creating an account on GitHub.

github.com


GitHub - GiovanniDicanio/WinReg: Convenient high-level C++ wrapper around the Windows Registry API

Convenient high-level C++ wrapper around the Windows Registry API - GiovanniDicanio/WinReg

github.com


и оба говно

Михаил Бластов 05.09.2022 01:16

Цитата:

Сообщение от kin4stat

и оба говно

ждем от тебя класс

Receiver 05.09.2022 10:42

Цитата:

Сообщение от kin4stat

Говно одним словом.

Как минимум:
Вместо нормальных эксепшенов юзается самописное говно(спасибо хоть за то, что наследовано от
Код:

std::exception
).

А еще это самописное говно полная хуета. Привет от виртуального деструктора.

В чем проблема была заюзать
Код:

std::system_error?
Поехали дальше:

Вместо
Код:

std::string_view
принимается
Код:

const std::string&
Ну и вишенка на торте - уебанский интерфейс. Есть много вариантов сделать нормально, например как у мапы, или как у жсона, но был выбран самый уебский и систайловый.

В чем проблема сделать

C++:





Код:

RegEdit r
;
if
(
auto
it
=
r
.
find
(
)
;
it
!=
r
.
end
(
)
)
{
std
::
visit
(
*
it
,
[
]
(
const
auto
&
value
)
{
using
T
=
std
::
remove_cv_ref_t

;
if
constexpr
(
std
::
is_same_v

)
{
// ...
}
else
if
constexpr
(
std
::
is_same_v

)
{
// ...
}
else
{
// ...
}
}
)
;
}



Или

C++:





Код:

RegEdit r
;
try
{
auto
value
=
r
.
get

(
"key"
)
;
}
catch
(
const
std
::
runtime_error
&
ec
)
{
// wrong type ...
// ... or key not found
}



Или

C++:





Код:

RegEdit r
;
if
(
auto
it
=
r
.
find
(
)
;
it
!=
r
.
end
(
)
)
{
auto
value
=
it
.
get

(
)
;
}



Короче одним словом:

Хорошая идея на счёт
Код:

std::system_error
. А вот твою ***ню про итераторы я вообще не понял. Зачем получать итератор через
Код:

find
, чтобы потом в итоге всё равно использовать
Код:

get
, лол? Ты предлагаешь сделать перебор ключей через итераторы, но когда ты обращаешься к реестру - заранее знаешь в каком ключе находится твой каталог. И что начнётся если каталог существует в нескольких ключах одновременно. =/

Receiver 05.09.2022 12:18

Нововведения и исправления:​
  • Исправил краш при вызове
    Код:

    closeCatalog
  • Добавил
    Код:

    removeCatalog
  • Добавил поддержку
    Код:

    REG_BINARY
  • Заменил кастомный
    Код:

    Exception
    на
    Код:

    std::system_error

MeG@LaDo[N] ^_^ 05.09.2022 12:55

*****тые теги

https://forum.antichat.xyz/attachments/28138250/

Михаил Бластов 05.09.2022 18:04

Цитата:

Сообщение от MeG@LaDo[N] ^_^

*****тые теги

тему создал не @kin4stat так что не удивительно

Receiver 06.09.2022 14:34

Нововведения и исправления:​
  • Исправлено непредсказуемое поведение
    • При использовании
      Код:

      std::string::resize
      строка реаллоцируется


Время: 11:28