lua-users home
lua-l archive

Re: C calling Lua with arguments

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


It was thus said that the Great Milan Obuch once stated:
> Hi,
 Hello.
> When plugin is being loaded, a function is registered with Claws Mail
> hook mechanism which is to be called on creating mail compose window.
> When I try to create new message or reply to existing one, compose
> window is being created and my function is being called with an
> argument - C pointer to structure describing the window. In my C
> function I use luaL_dofile() to load a script from file and execute it.
> 
> And here comes the question - how can I use this C pointer as an
> argument for my script? I know I can do
> 
> lua_pushlightuserdata(L,(void *)compose_window_argument);
> luaL_dofile(L,"my_script_file");
> lua_pop(L,1);
> 
> but I found no way to access this argument from my_script_file. 
 There is a way, but you can't use luaL_dofile(). First off, change the C
code to:
	int rc;
	rc = luaL_loadfile(L,"my_script_file");
	if (rc != LUA_OKAY) error(); 
	lua_pushlightuserdata(L,(void *)compose_window_argument);
	rc = lua_pcall(L,1,LUA_MULTRET,0);
	if (rc != LUA_OKAY) error();
(minimal error checking added---handle as appropriate). Then in your
script:
	local window = ...
or
	local window = select(1,...)
 When Lua loads any code, it is compiled and returned as a function, which
when run, will do the action of the script. As long as there are parameters
on the stack, the script can reference them via '...' (or select()).
 -spc

AltStyle によって変換されたページ (->オリジナル) /