Вы попались на то, что многие функции WinAPI реализованы в двух вариантах - для строк Unicode (по правильному конечно это wide characters) и ASCII. Для простоты выбора конкретной из них используют директивы препроцессора, одна из которых на этапе компиляции сама подбирает вариацию функции на основе настроек проекта. Т.е. все функции по типу MessageBox на самом деле бывают двух вариантов - MessageBoxA и MessageBoxW, сам MessageBox - это только макрос.
В lua Вы, естественно, вручную беспокоитесь о декларировании функций, а это значит, что макроса SendMessage здесь нет, в то время как внешний символ SendMessageA присутствует в составе библиотеки user32.dll.
Lua:
Код:
function
main
(
)
local
ffi
=
require
(
'ffi'
)
ffi
.
cdef
(
'int SendMessageA(int, int, int, int);'
)
ffi
.
C
.
SendMessageA
(
9576
,
0x1002
,
0xFF
,
0xFFF
)
end