PDA

Просмотр полной версии : SF | Проблемы с получением серверного сообщения


ANZR
08.04.2021, 05:09
Всем, ку

Хоть я и развился в SF довольно-таки просто, но все таки стыдный вопрос возник

Есть у меня RPC пакет с id = 93 (кто знает, тот поймет)

Так вот, как правильно его прочитать, чтоб вывести итоговое сообщение в чат

У меня вышло так

с++:






UINT32 dColor
;
UINT32 messageLen
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
dColor
)
;
params
->
bitStream
->
Read
(
messageLen
)
;
char
*
msg
=
new
char
[
messageLen
]
;
params
->
bitStream
->
Read
(
msg
,
messageLen
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
msg
)
;
params
->
bitStream
->
ResetReadPointer
(
)
;




Но вот в чем загвоздка, после прочтения, у меня вместе с сообщением может вывести мусор. С чем это связано

AdCKuY_DpO4uLa
08.04.2021, 11:24
C++:






UINT32 dColor
;
UINT32 messageLen
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
dColor
)
;
params
->
bitStream
->
Read
(
messageLen
)
;
char
*
msg
=
new
char
[
messageLen
]
;
params
->
bitStream
->
Read
(
msg
,
messageLen
)
;
msg
[
messageLen
]
=
'\0'
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
msg
)
;
msg
[
]
delete
;
msg
=
nullptr
;
params
->
bitStream
->
ResetReadPointer
(
)
;




Попробуй так

kin4stat
08.04.2021, 12:57
C++:






UINT32 dColor
;
UINT32 messageLen
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
dColor
)
;
params
->
bitStream
->
Read
(
messageLen
)
;
char
*
msg
=
new
char
[
messageLen
]
;
params
->
bitStream
->
Read
(
msg
,
messageLen
)
;
msg
[
messageLen
]
=
'\0'
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
msg
)
;
msg
[
]
delete
;
msg
=
nullptr
;
params
->
bitStream
->
ResetReadPointer
(
)
;




Попробуй так


Сегфолт

AdCKuY_DpO4uLa
08.04.2021, 13:00
Сегфолт


Что?

Musaigen
08.04.2021, 14:07
Что?



Ошибка сегментации — Википедия (https://www.blast.hk/redirect/aHR0cHM6Ly9ydS53aWtpcGVkaWEub3JnL3dpa2kvJUQwJTlFJU QxJTg4JUQwJUI4JUQwJUIxJUQwJUJBJUQwJUIwXyVEMSU4MSVE MCVCNSVEMCVCMyVEMCVCQyVEMCVCNSVEMCVCRCVEMSU4MiVEMC VCMCVEMSU4NiVEMCVCOCVEMCVCOA)

ru.wikipedia.org

AdCKuY_DpO4uLa
08.04.2021, 14:37
Ошибка сегментации — Википедия (https://www.blast.hk/redirect/aHR0cHM6Ly9ydS53aWtpcGVkaWEub3JnL3dpa2kvJUQwJTlFJU QxJTg4JUQwJUI4JUQwJUIxJUQwJUJBJUQwJUIwXyVEMSU4MSVE MCVCNSVEMCVCMyVEMCVCQyVEMCVCNSVEMCVCRCVEMSU4MiVEMC VCMCVEMSU4NiVEMCVCOCVEMCVCOA)

ru.wikipedia.org



И почему она происходит?

Dark_Knight
08.04.2021, 16:04
И почему она происходит?


Потому что ты дурак, вот почему. Обращаешься к несуществующему участку памяти.

ANZR
08.04.2021, 16:20
Все конечно хорошо, а проблему кто-нить скажет?)

Dark_Knight
08.04.2021, 16:24
Пробуй.

C++:






UINT32 dColor
;
UINT32 len
;
std
::
string text
;
auto
*
bs
=
params
->
bitStream
;
bs
->
Read
(
dColor
)
;
bs
->
Read
(
len
)
;
text
.
resize
(
len
)
;
bs
->
Read
(
text
.
data
(
)
,
len
)
;

kin4stat
08.04.2021, 19:28
Ещё и обозвал((


Тебе повезло что тебя не крашнуло потому что

undefined behavior

ANZR
10.04.2021, 02:33
Пробуй.

C++:






UINT32 dColor
;
UINT32 len
;
std
::
string text
;
auto
*
bs
=
params
->
bitStream
;
bs
->
Read
(
dColor
)
;
bs
->
Read
(
len
)
;
text
.
resize
(
len
)
;
bs
->
Read
(
text
.
data
(
)
,
len
)
;





Последняя функция вызывает ошибку



Серьезность Код Описание Проект Файл Строка Состояние подавления

Ошибка C2664 "bool BitStream::Read(char *,const int)": невозможно преобразовать аргумент 1 из "const _Elem *" в "char *" SFPlugin c:\users\anonim\desktop\sf plugin template\sfplugin\main.cpp 26

Dark_Knight
10.04.2021, 19:53
Пробуй так.

C++:






bs
->
Read
(
(
PCHAR
)
text
.
data
(
)
,
len
)
;

ANZR
10.04.2021, 20:08
Пробуй так.

C++:






bs
->
Read
(
(
PCHAR
)
text
.
data
(
)
,
len
)
;





Да, робит

Можешь сказать, что это за функция .data()?

kin4stat
10.04.2021, 21:41
Да, робит
Можешь сказать, что это за функция .data()?



std::string.data() - Recherche Google (https://www.blast.hk/redirect/aHR0cHM6Ly9nb29nbGUuY29tL3NlYXJjaD9xPXN0ZDo6c3RyaW 5nLmRhdGEoKQ)