Lua的使用入门之C/C++与lua函数的混合调用

原创 2013年12月03日 00:05:29

参考文章:http://www.oschina.net/code/snippet_243525_25045#41626

lua与c/c++遵循相应规范的条件下可以相互调用.

1.在c/c++中定义一个lua接口的函数:

//要在lua中调用的c函数

int l_hello(lua_State* pState)
{
cout<<"This is c function: l_hello"<<endl;
return 0;
}

// lua函数对应的lua中注册和调用的l_hello函数基址的别名
lua_register_t lua_cfunction_list[] = {
"hello", l_hello, // [1]
NULL // [2]
};

2.在c中编写l写到ua状态机的函数注册函数:

// 将c函数注册到lua状态机中
void register_functions(lua_State* L)
{
lua_register_t* p = lua_cfunction_list;
while (p->name) {
lua_pushcfunction(L, p->pfunc);// 将函数压栈->l_hello
lua_setglobal(L, p->name);//将函数名设为lua文件中调用c函数l_hello的函数别名
++p;
}
}

3.lua中编写调用c函数l_hello的函数:

main_lua.lua:

print("loading file: main_lua.lua...");
function MainEntry(...)
    print("this is MainEntry()");
hello();// 调用的c函数l_hello
for i,v in ipairs(arg) do
   print(i.."="..tostring(v));
end
end

4.在c中调用MainEntry:

lua_getglobal(L, "MainEntry");
if (lua_type(L, -1) == LUA_TFUNCTION)
{
for (int i = 0; i < argc; i++)
{
lua_pushstring(L, argv[i]);
}
lua_pcall(L, argc, 0, 0);// 调用lua函数

}

由此可见,lua/c混合调用就是c->lua->c,重要的逻辑判断函数在lua中编写,而调用lua函数的主体c代码主要是执行一些数据存取、检查设定等工作。


代码链接:

http://download.csdn.net/detail/yuanmushen/6646875

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

lua调用C/C++函数

tolua++绑定C/C++语言函数供lua调用

1,C/C++提供给lua的接口写在ScriptAPI_*.h和ScriptAPI_*.cpp中(根据模块可以分为多个文件)。为简化问题,要求接口参数为简单数据类型(number、string),且全...

在LUA脚本中调用C/C++函数

三、在LUA脚本中调用C/C++函数        可以被Lua函数调用的C函数必须遵循的协议(这个协议定义了参数和结果的传递方式):C函数从LUA栈上按直接的顺序获取参数(第一个参数首先被push)...

Lua调用C/C++函数

// // main.cpp // LuaAndCpp //#include static int lua_getName(lua_State* L){ lua_pushstring(L, ...

cocos2dx关于在c/c++中调用lua函数

关于在c/c++中调用lua函数

lua入门之二:c/c++ 调用lua及多个函数返回值的获取

当 Lua 调用 C 函数的时候,使用和 C 调用 Lua 相同类型的栈来交互。C 函数从栈中获取她的参数,调用结束后将返回结果放到栈中。为了区分返回结果和栈中的其他的值,每个 C 函数还会返回结果的...
  • ybhjx
  • ybhjx
  • 2016-03-24 13:59
  • 354

C/C++函数调用LUA函数

二、C/C++函数调用LUA函数        为应用程序注册新的C函数到Lua是扩展Lua的基本方法之一。一般本说,从Lua中调用C函数,不是指Lua可以调用任何类型的C函数。对于一个C函数来说,要...

luaGlue函数——lua中调用c/c++函数

所有能在lua中调用的c/c++函数都必须是遵循lua定义的函数原型:typedef int (*lua_CFunction) (lua_State *L),其中返回值整型int表示,函数返回值个数。...

Lua调用C函数:tolua++ 的使用

C与lua交互时通过栈的方式来完成,lua调用C函数时,需要同样的通过压栈出栈来完成数据交互。 使用tolua++,简化这个流程,我们可以方便的让lua调用C,原理是通过pkg文件定义C暴露给lua...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)