如何将参数传递给我的lua dll函数?
我做了一个简单的lua dll函数:
static int functionName(lua_State *L, int arg1, char arg2[])
{
printf("running my dll:\n");
printf("passing number: %d passing string = %s",arg1,arg2);
return 0;
}
在lua中使用它来运行函数:
require "myTestDll";
myTestDll.functionName(1231544,"Hello World, I'm running my DLL.");
但结果是它输出了错误的数字,甚至没有接近正确的字符串。
答案 0 :(得分:4)
您注册到Lua的函数必须始终具有相同的C或C ++签名:int FuncName(lua_State*);
它们不能使用或多于此参数。
传递给已注册函数的Lua参数是lua_State*
的一部分。它们是放在Lua堆栈上的第一个值。因此,您可以调用lua_gettop
来获取参数的数量。你可以使用通常的Lua堆栈函数将它们从堆栈中拉出来。
例如,如果您希望函数有两个参数,其中第一个是数字,第二个是字符串,则执行以下操作:
int functionName(lua_State *L)
{
int arg1 = 0;
const char *arg2 = NULL;
size_t arg2Len = 0; //Lua strings have an explicit length; they can contain null characters.
if(lua_gettop(L) != 2)
{
lua_pushstring(L, "Must provide two parameters to this Lua function.");
lua_error(L);
}
arg1 = luaL_checkinteger(L, 1);
arg2 = luaL_checklstring(L, 2, &arg2Len);
//Do stuff with arguments.
}