HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 25.01.2022, 20:08
RedHolms
Постоянный
Регистрация: 04.06.2020
Сообщений: 620
С нами: 3127813

Репутация: 133


По умолчанию

Есть функция инициализации объекта сокета:

C++:





Код:
static
void
init_socket_instance
(
lua_State
*
L
,
SOCKETH_T hSocket
,
int
family
,
int
type
,
int
protocol
)
{
if
(
hSocket
==
INVALID_SOCKET
)
luaL_error
(
L
,
"an error occured while creating socket"
)
;
SocketInfo iSocket
;
ZeroMemory
(
&
iSocket
,
sizeof
(
iSocket
)
)
;
iSocket
.
hSocket
=
hSocket
;
iSocket
.
family
=
family
;
iSocket
.
type
=
type
;
iSocket
.
protocol
=
protocol
;
lua_pushlightuserdata
(
L
,
&
iSocket
)
;
// Push SocketInfo
luaL_newmetatable
(
L
,
SOCKET_DATA_NAME
)
;
// Create new metatable for SocketInfo(socket_data)
lua_getglobal
(
L
,
"socket"
)
;
// Get Global Socket Table(socket)
lua_setfield
(
L
,
-
2
,
"__index"
)
;
// socket_data.__index = socket
lua_setmetatable
(
L
,
-
2
)
;
// Set metatable of SocketInfo to socket_data
}


Свою задачу выполняет на отлично, но есть проблемка:

В другой функции
Код:
check_socket_data
(ниже), при получении этой структуры, данные в ней 'повреждаются', и вместо handler'а сокета, там рандомное число.

Возможно, поможет: Значения hSocket при одном из запусков(естественно, hSocket меняется)

hSocket при инициализации = 248

hSocket при получении в функции
Код:
check_socket_data
= 1975321384

C++:





Код:
static
SocketInfo
*
check_socket_data
(
lua_State
*
L
)
{
return
(
SocketInfo
*
)
luaL_checkudata
(
L
,
1
,
SOCKET_DATA_NAME
)
;
}




Цитата:
Сообщение от HarukiSt  

Есть функция инициализации объекта сокета:

C++:





Код:
static
void
init_socket_instance
(
lua_State
*
L
,
SOCKETH_T hSocket
,
int
family
,
int
type
,
int
protocol
)
{
if
(
hSocket
==
INVALID_SOCKET
)
luaL_error
(
L
,
"an error occured while creating socket"
)
;
SocketInfo iSocket
;
ZeroMemory
(
&
iSocket
,
sizeof
(
iSocket
)
)
;
iSocket
.
hSocket
=
hSocket
;
iSocket
.
family
=
family
;
iSocket
.
type
=
type
;
iSocket
.
protocol
=
protocol
;
lua_pushlightuserdata
(
L
,
&
iSocket
)
;
// Push SocketInfo
luaL_newmetatable
(
L
,
SOCKET_DATA_NAME
)
;
// Create new metatable for SocketInfo(socket_data)
lua_getglobal
(
L
,
"socket"
)
;
// Get Global Socket Table(socket)
lua_setfield
(
L
,
-
2
,
"__index"
)
;
// socket_data.__index = socket
lua_setmetatable
(
L
,
-
2
)
;
// Set metatable of SocketInfo to socket_data
}


Свою задачу выполняет на отлично, но есть проблемка:

В другой функции
Код:
check_socket_data
(ниже), при получении этой структуры, данные в ней 'повреждаются', и вместо handler'а сокета, там рандомное число.
Возможно, поможет: Значения hSocket при одном из запусков(естественно, hSocket меняется)
hSocket при инициализации = 248
hSocket при получении в функции
Код:
check_socket_data
= 1975321384

C++:





Код:
static
SocketInfo
*
check_socket_data
(
lua_State
*
L
)
{
return
(
SocketInfo
*
)
luaL_checkudata
(
L
,
1
,
SOCKET_DATA_NAME
)
;
}

Проблему решил самолично

Решение:

Выделять память malloc'ом
 
Ответить с цитированием
 



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.