关于在lua中调用c++函数的问题、、、、求高手! 100
这个是lua文件的代码,很简单、localnum=cpp_GetNumber(101);其中,cpp_GetNumber();则是一个在C++中自定义的函数。------...
这个是lua文件的代码,很简单、
local num = cpp_GetNumber(101);
其中, cpp_GetNumber(); 则是一个在C++中自定义的函数。
---------------------------------------------------------------------------------------------
下面这个则是C++的代码,也就是自定义的cpp_GetNumber();函数。
int HelloLua::F( int num )
{
return num ;
}
int HelloLua::cpp_GetNumber( lua_State* pL )
{
int num = (int)lua_tonumber(pL, 1);
lua_pushnumber(pL, F(num));
return 1;
}
---------------------------------------------------------------------------------------------
问题1 :
cpp_GetNumber( lua_State* pL ) 这个函数,它的形参不是需要一个 lua_State* pL 吗?
那为什么在lua文件调用这个函数,为什么可以传一个101进去?101不是一个整数类型吗?
问题2:
为什么cpp_GetNumber这个函数它的返回值一定要定义成int的,不能定义成void的?
问题3:
int num = (int)lua_tonumber(pL, 1);
lua_pushnumber(pL, F(num));
为什么调用这2句代码,值就可以赋给num ?? (我说的这个num指的是lua文件里的那个num。 指这里的num。 ---------------> local num = cpp_GetNumber(101); 展开
local num = cpp_GetNumber(101);
其中, cpp_GetNumber(); 则是一个在C++中自定义的函数。
---------------------------------------------------------------------------------------------
下面这个则是C++的代码,也就是自定义的cpp_GetNumber();函数。
int HelloLua::F( int num )
{
return num ;
}
int HelloLua::cpp_GetNumber( lua_State* pL )
{
int num = (int)lua_tonumber(pL, 1);
lua_pushnumber(pL, F(num));
return 1;
}
---------------------------------------------------------------------------------------------
问题1 :
cpp_GetNumber( lua_State* pL ) 这个函数,它的形参不是需要一个 lua_State* pL 吗?
那为什么在lua文件调用这个函数,为什么可以传一个101进去?101不是一个整数类型吗?
问题2:
为什么cpp_GetNumber这个函数它的返回值一定要定义成int的,不能定义成void的?
问题3:
int num = (int)lua_tonumber(pL, 1);
lua_pushnumber(pL, F(num));
为什么调用这2句代码,值就可以赋给num ?? (我说的这个num指的是lua文件里的那个num。 指这里的num。 ---------------> local num = cpp_GetNumber(101); 展开
2个回答
展开全部
第一个问题:
你不要把lua 源代码里面的参数和lua扩裂亩侍展的c函数里面的参数混淆了。lua那边,是不管什么指针的(那个pLc这边函数里面的参数,当然要求是pL指针。
第二个问题:
对于一个c函数来说,它必须返回一个int值。这个int值告诉lua,它返回几个参数到lua里面去(可以是返回0个参数;如果是0,那么就返回0)。
第三个问题:
lua_tonumber就是把lua堆栈里的相应索引的值作为一个整耐敏数返回。你这条语句里就肆吵是把lua那边传给来的参数赋给了num变量。
你不要把lua 源代码里面的参数和lua扩裂亩侍展的c函数里面的参数混淆了。lua那边,是不管什么指针的(那个pLc这边函数里面的参数,当然要求是pL指针。
第二个问题:
对于一个c函数来说,它必须返回一个int值。这个int值告诉lua,它返回几个参数到lua里面去(可以是返回0个参数;如果是0,那么就返回0)。
第三个问题:
lua_tonumber就是把lua堆栈里的相应索引的值作为一个整耐敏数返回。你这条语句里就肆吵是把lua那边传给来的参数赋给了num变量。
展开全部
你的形参指针类型,也就是一个地址,在机器里,地址是用整数表示扮饥的。传一个整数进去,是不会报错的。
我猜你空亏的这个函数应该在类 HelloLua 已经定义了原型,在类外实现时,只能按照原型来实现,如果修改返回类型,就变成了重斗缺神新定义,也就是重载,在类外是不允许重载原型的。
你说的是不是这样:int num; lua_pushnumber(pL,F(num));
num 里应该是初始时的默认值,应为 F 函数是值传递,不会改变num的值,除非 F 函数参数为指针类型,而且返回类型为 指针类型。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询