Я возможно знаю ответ, но хочу убедиться в его верности.
Имеется код
Цитата
--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 то пилот просто падает.
Ваши идеи ?