Здравствуйте, гость ( Вход | Регистрация )

> Lua. Вызов колбека из сторонней библиотеки
Cockney
сообщение 2.3.2024, 21:51
Сообщение #1


********

Master
Сообщений: 1.395
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 21212
Пользователь №: 16.156



Я возможно знаю ответ, но хочу убедиться в его верности.

Имеется код

Цитата

--lua
exec('tcpserver.exe')
local pid = errorlevel()
wait(500)
exec('tcpclient.exe')
local ffi = require("ffi")
local mininet = ffi.load("libwpe_proxy")

ffi.cdef[[
int wpe_inject(const char *libwpePath,
unsigned int pid,
unsigned int dataChannelBlocksCount,
unsigned int dataChannelBlockSize,
unsigned int commandChannelBlocksCount,
unsigned int commandChannelBlockSize
);

typedef int32_t(*packet_handler)(const char* sourceHost, uint32_t sourceHostSize, uint16_t sourcePort, const char* destHost, uint32_t destHostSize, uint16_t destPort, const uint8_t* data, uint32_t dataSize);

int wpe_listen(unsigned int pid, packet_handler);
]]


mininet.wpe_inject("libwpe.dll", pid, 3, 65535, 15, 10000)

function handler(sourceHost, sourceHostSize, sourcePort, destHost, destHostSize, destPort, data, dataSize)
local message = 'Source host: ' .. ffi.string(sourceHost, sourceHostSize) .. '\t, source port: '.. sourcePort .. '\tdest host: ' .. ffi.string(destHost, destHostSize) .. '\tdest port: ' .. destPort .. '\t data size: ' .. dataSize
--log('Source host: ' .. ffi.string(sourceHost, sourceHostSize) .. '\t, source port: '.. sourcePort .. '\tdest host: ' .. ffi.string(destHost, destHostSize) .. '\tdest port: ' .. destPort .. '\t data size: ' .. dataSize)
return 0
end

mininet.wpe_listen(pid, handler)

while true do
wait(1000)
end


Что он делает - не суть важно, внимание к функции handler, которая передается в библиотеку и вызывается этой же библиотекой в подходящий момент,

в текущем варианте - заполнение локальной переменной + возврат все ок работает, а вот если добавить любую функцию вывода инфы - msg, log то пилот просто падает.

Ваши идеи ?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
DarkMaster
сообщение 5.3.2024, 20:57
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.476
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27857
Пользователь №: 11.279



Цитата
проблема вообще не в выводе лога, а в том, что сами пилотовские функции ведут себя странно если они вызываются не из потока луа машины.

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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения



Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 16.5.2024, 2:15
Designed by Nickostyle