Вход

Просмотр полной версии : re_regedit - простая работа с реестром


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

Смог найти только древнейший класс от @SR_team (https://www.blast.hk/members/11231/): 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
Смог найти только древнейший класс от @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
Нашел за 5 секунд по первой ссылке в гугле

GitHub - m4x1m1l14n/Registry: C++ wrapper for manipulating Windows registry (https://github.com/m4x1m1l14n/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 (https://github.com/GiovanniDicanio/WinReg)

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

github.com



и оба говно

Михаил Бластов
05.09.2022, 01:16
и оба говно


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

Receiver
05.09.2022, 10:42
Говно одним словом.

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

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
^_^"]

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


тему создал не @kin4stat (https://www.blast.hk/members/161331/) так что не удивительно

Receiver
06.09.2022, 14:34
Нововведения и исправления:​
Исправлено непредсказуемое поведение
При использовании

std::string::resize

строка реаллоцируется

Dark_Knight
06.09.2022, 20:19
Офиеееть... Ну и C++... Тут же пипец как сложно, я вижу для себя много нового, что написал Киня... Я просто в ахуе от этого C++...
Где Киня так кодить научился??? 🧐🤨🙄


Иди исходники буста посмотри или stl



Да ты чё?! Я там охуею, почти ничего не пойму. От этого C++ можно шизоидом стать из-за постоянных ошибок при компиляции!
Когда у меня были ошибки при компиляции и я не понимал, как их пофиксить, мне хотелось создателю C++ лицо об асфальт растереть...



https://englishlib.org/dictionary/img/wlibrary/p/602817a543b5a1.98341276.jpg

MeG@LaDo[N] ^_^
06.09.2022, 20:32
Иди исходники буста посмотри или stl

https://englishlib.org/dictionary/img/wlibrary/p/602817a543b5a1.98341276.jpg


ты чутка темы попутал)

Dark_Knight
06.09.2022, 20:34
^_^"]

ты чутка темы попутал)


Неа. Не попутал.

F0RQU1N and
14.09.2022, 08:19
и оба говно


вроде нормальные

r4nx
28.09.2022, 03:18
Привет от виртуального деструктора.


На будущее автору темы - при наследовании от std::exception проблем с виртуальным деструктором нет, комментатор прост не разобрался в наследовании виртуальных функций и серанул не по делу