 |
|

19.04.2023, 02:43
|
|
Участник форума
Регистрация: 25.11.2018
Сообщений: 263
С нами:
3929792
Репутация:
78
|
|
Использую в проекте "Use Multi-Byte Character Set". Заметил, что при работе с sqlite3_open ( www.sqlite.org) и наличии русских символов в пути к базе возвращает unable to open database file. Как решить проблему?
|
|
|

19.04.2023, 04:32
|
|
Познавший АНТИЧАТ
Регистрация: 14.07.2019
Сообщений: 1,097
С нами:
3596877
Репутация:
183
|
|
Сообщение от Leatington
Использую в проекте "Use Multi-Byte Character Set". Заметил, что при работе с sqlite3_open ( www.sqlite.org) и наличии русских символов в пути к базе возвращает unable to open database file. Как решить проблему?
Ты когда мульти байт используешь, у тебя некоторые буквы на кириллице представляются несколькими байтами,
sqlite3_open ожидает UTF-8, который использует однобайтовую кодировку для ASCII и многобайтовую для не ASCII, включая кириллицу , преобразуй путь к файлу в UTF-8 перед передачей в sqlite3_open, в винапи для этого есть MultiByteToWideChar и обратная WideCharToMultiByte
|
|
|

19.04.2023, 15:36
|
|
Участник форума
Регистрация: 25.11.2018
Сообщений: 263
С нами:
3929792
Репутация:
78
|
|
Сообщение от Digger Man
Ты когда мульти байт используешь, у тебя некоторые буквы на кириллице представляются несколькими байтами,
sqlite3_open ожидает UTF-8, который использует однобайтовую кодировку для ASCII и многобайтовую для не ASCII, включая кириллицу , преобразуй путь к файлу в UTF-8 перед передачей в sqlite3_open, в винапи для этого есть MultiByteToWideChar и обратная WideCharToMultiByte
(обновлено), получилось с помощью следующей функции, спасибо.
C++:
Код:
std
::
string
CP1251_to_UTF8
(
const
char
*
str
)
{
std
::
string res
;
int
result_u
,
result_c
;
result_u
=
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
0
,
0
)
;
if
(
!
result_u
)
{
return
0
;
}
wchar_t
*
ures
=
new
wchar_t
[
result_u
]
;
if
(
!
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
ures
,
result_u
)
)
{
delete
[
]
ures
;
return
0
;
}
result_c
=
WideCharToMultiByte
(
65001
,
0
,
ures
,
-
1
,
0
,
0
,
0
,
0
)
;
if
(
!
result_c
)
{
delete
[
]
ures
;
return
0
;
}
char
*
cres
=
new
char
[
result_c
]
;
if
(
!
WideCharToMultiByte
(
65001
,
0
,
ures
,
-
1
,
cres
,
result_c
,
0
,
0
)
)
{
delete
[
]
cres
;
return
0
;
}
delete
[
]
ures
;
res
.
append
(
cres
)
;
delete
[
]
cres
;
return
res
;
}
Код:
[CODE]
std::string res = CP1251_to_UTF8(path.c_str());
sqlite3* users;
if (sqlite3_open(res.c_str(), &users))
{
std::cout
|
|
|

19.04.2023, 18:35
|
|
Познавший АНТИЧАТ
Регистрация: 01.04.2018
Сообщений: 1,710
С нами:
4272230
Репутация:
183
|
|
[QUOTE="Leatington"]
(обновлено), получилось с помощью следующей функции, спасибо.
C++:
Код:
std
::
string
CP1251_to_UTF8
(
const
char
*
str
)
{
std
::
string res
;
int
result_u
,
result_c
;
result_u
=
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
0
,
0
)
;
if
(
!
result_u
)
{
return
0
;
}
wchar_t
*
ures
=
new
wchar_t
[
result_u
]
;
if
(
!
MultiByteToWideChar
(
1251
,
0
,
str
,
-
1
,
ures
,
result_u
)
)
{
delete
[
]
ures
;
return
0
;
}
result_c
=
WideCharToMultiByte
(
65001
,
0
,
ures
,
-
1
,
0
,
0
,
0
,
0
)
;
if
(
!
result_c
)
{
delete
[
]
ures
;
return
0
;
}
char
*
cres
=
new
char
[
result_c
]
;
if
(
!
WideCharToMultiByte
(
65001
,
0
,
ures
,
-
1
,
cres
,
result_c
,
0
,
0
)
)
{
delete
[
]
cres
;
return
0
;
}
delete
[
]
ures
;
res
.
append
(
cres
)
;
delete
[
]
cres
;
return
res
;
}
Код:
[CODE]
std::string res = CP1251_to_UTF8(path.c_str());
sqlite3* users;
if (sqlite3_open(res.c_str(), &users))
{
std::cout
|
|
|

19.04.2023, 18:39
|
|
Познавший АНТИЧАТ
Регистрация: 14.07.2019
Сообщений: 1,097
С нами:
3596877
Репутация:
183
|
|
Сообщение от Musaigen
и вроде функцию можно укоротить в два вызова (но это не точно)
можно, если wstring и wstring_convert юзать
по поводу мемори лика, можно просто перед каждым ретерном добавить delete[] ures/cres
|
|
|

22.04.2023, 17:10
|
|
Новичок
Регистрация: 05.04.2023
Сообщений: 10
С нами:
1637808
Репутация:
3
|
|
qq, как имитировать нажатие Y?
от этого стоит защита:
c++:
Код:
keybd_event
(
key
,
0
,
KEYEVENTF_KEYDOWN
,
0
)
;
sleep
(
10
)
keybd_event
(
key
,
0
,
KEYEVENTF_KEYUP
,
0
)
;
дайте варики что юзать
|
|
|

22.04.2023, 19:32
|
|
Познавший АНТИЧАТ
Регистрация: 14.07.2019
Сообщений: 1,097
С нами:
3596877
Репутация:
183
|
|
Сообщение от Yancode
qq, как имитировать нажатие Y?
от этого стоит защита:
c++:
Код:
keybd_event
(
key
,
0
,
KEYEVENTF_KEYDOWN
,
0
)
;
sleep
(
10
)
keybd_event
(
key
,
0
,
KEYEVENTF_KEYUP
,
0
)
;
дайте варики что юзать
SendInput() в вин апи есть
input.ki.wScan = MapVirtualKey('Y', MAPVK_VK_TO_VSC);
input.ki.wVk = 'Y';
|
|
|

23.04.2023, 15:15
|
|
Флудер
Регистрация: 02.02.2019
Сообщений: 5,070
С нами:
3831395
Репутация:
183
|
|
Как можно получить название кнопок диалога без хука на CDIalog::Show? Облазил всю структуру CDialog и подструктур в ней, но нихуя.
|
|
|

23.04.2023, 21:39
|
|
Постоянный
Регистрация: 18.03.2017
Сообщений: 410
С нами:
4818548
Репутация:
133
|
|
Сообщение от ARMOR
Как можно получить название кнопок диалога без хука на CDIalog::Show? Облазил всю структуру CDialog и подструктур в ней, но нихуя.
Полезные сниппеты и функции
в чем смысл загружать длл в свой же процесс таким способом? ракбот ну и длл лоадер
www.blast.hk
|
|
|

26.04.2023, 02:20
|
|
Постоянный
Регистрация: 06.09.2017
Сообщений: 505
С нами:
4571066
Репутация:
251
|
|
как реализовать запуск входа на сервер(открытие гташки) на плюсах? пробовал отправять с цмдху samp.exe с ником/айпи/портом = подключение к :7777, gta_sa.exe = дало одиночку. буду благодарен
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|