lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Hi,

i have a question regarding the use of luaffi (https://github.com/jmckaskill/luaffi) and since i have read this mailinglist silently the last months the answers given to questions were really quite helpful, it's a great list - thanks to the contributors.
Maybe someone is here using luaffi or luajit/ffi (if the differences to 
luajit isn't that big) who can give me a direction. The OS is Windows.
I am creating a library which is dynamically loaded by another host 
process. I have no control over the host process and the API is fixed.
This host process calls functions in my library receiving a function 
pointer as argument (to return results async) and some struct memory 
adresses. My function adds these values to the lua stack and executes a 
lua script with lua_pcall. In other words, i am mapping calls to the 
library directly to lua-functions in my script.
Currently i am using luaffi in my script calling win32 API functions and 
working with the structs which is working great, the last thing which i 
have not yet resolved is calling the given callback which i have 
received as function pointer.
Can i cast a function pointer to something luaffi interprets as callable 
function?
I have tried this (snipped out of the code):
======================================================================


ffi.cdef[[
    typedef void (__stdcall *RESULT_CB)(DWORD ResultID,LONG Result);
]]

function libraryFunctionXYZ(data)
  local _cb = =ffi.cast("RESULT_CB*",data.cbAddr)
  _cb(0,0);
end

=====================================================================

That doesn't work, i am getting the error:

"only function callbacks are callable"


Is it even possible to cast a function pointer memory address to something luaffi can understand/call?

Bye
Björn