A very crude library to enable lua call functions in dynamic link library like this:
lua.calls('__stdcall', 'user32', 'MessageBoxA', 0, 'Message Box Message', 'Caption', 0);In order to use lcall, please include "lcall.h" and call lcall_open just like lua_openlibs.
Please refer the test/*_example.lua for more details ,
This library supports windows x86 for now. I'm coding it to make it run on linux.
lcall.load('library_name')Returns the handler of a dynamic link library.
lcall.get('function_name')Return the address of a function in dynamic library.
lcall.call('call_convention', address_of_function, arguments)Calls the function address_of_function returned by lcall.get. The call_convention should be __stdcall or __cdecl. More call conventions will be supported in the future. arguments are passed to the target function, You can set them to meet your need.
Only LUA_TNIL, LUA_TNUMBER, LUA_TBOOLEAN, LUA_TSTRING, LUA_TLIGHTUSERDATA are supported. LUA_TTABLE, LUA_TFUNCTION, LUA_TUSERDATA, and LUA_TTHREAD are not support for now. the supported types are treated as follow:
LUA_TNIL: int 0LUA_TNUMBER: int ?LUA_TBOOLEAN: int 1 or int 0LUA_TSTRING: void *LUA_TLIGHTUSERDATA: void *
The return value while be stored as a lightuserdata.
lcall.calls('call_convention', 'library_name', 'function_name', arguments);An easy way to call a function in a dynamic link library. Using this function is equal to use code below:
lcall.call('call_convention', lcall.get(lcall.load('library_name'), 'function_name'), arguments);The aim of this project is to provide a way to call any function provided by operating system directly in Lua. Just like what the FFI does.
But just like what official website said: _The lib _
There is a long way to go. A lot of things should be considered like:
- how to mapping from Lua table to C struct
- how to detect the call convention from a library, rather than set it in lua.
- how to manage many kinds of allocated resource for futrue reuse.