1、lua与C语言通信的主要方法是一个无所不在的虚拟栈。该栈由lua管理,lua只会改变栈的顶部,而C代码可以检索栈中间的元素,甚至在栈的任意位置插入或删除元素。
2、C语言没有提供异常处理机制,lua使用C语言中的setjmp机制,这是一种类似于异常处理的机制。当编写库代码时(被lua调用的C函数)使用longjmp捕获所有可能的错误;而编写应用程序代码时(调用lua的C代码),必须提供一种捕获错误的方法。
1)应用程序中错误代码处理:如果发生了内存分配错误,又不想结束应用程序,两种做法:
(1)设置紧急函数,不要把控制权返还给lua;
(2)让代码在保护模式下运行,调用lua_pcall()函数运行。
2)库代码中错误处理:
当一个C函数检测到一个错误时,就应该调用lua_error,lua_error会清理lua中所有需要清理的东西,然后跳转回发起执行的那个lua_pcall,并附上一条错误消息。
本文探讨了Lua脚本语言如何通过虚拟栈与C语言进行交互,解释了C语言中setjmp机制在Lua异常处理中的应用。文章还详细介绍了在Lua库代码及应用程序中处理错误的不同方法。
2339

被折叠的 条评论
为什么被折叠?



