c#与lua交互里,错误处理
如果是c#代码出错了
- [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
- static int _g_get_down(RealStatePtr L)
- {
- try {
- ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);
- translator.PushUnityEngineVector3(L, UnityEngine.Vector3.down);
- } catch(System.Exception gen_e) {
- return LuaAPI.luaL_error(L, "c# exception:" + gen_e);
- }
- return 1;
- }
会在所有导出的方法里,增加try catch,然后把错再抛到lua里。
如果是lua代码出错了
- [MonoPInvokeCallback(typeof(LuaCSFunction))]
- internal static int Panic(RealStatePtr L)
- {
- string reason = String.Format("unprotected error in call to Lua API ({0})", LuaAPI.lua_tostring(L, -1));
- throw new LuaException(reason);
- }
- public void ThrowExceptionFromError(int oldTop)
- {
- #if THREAD_SAFE || HOTFIX_ENABLE
- lock (luaEnvLock)
- {
- #endif
- object err = translator.GetObject(L, -1);
- LuaAPI.lua_settop(L, oldTop);
- // A pre-wrapped exception - just rethrow it (stack trace of InnerException will be preserved)
- Exception ex = err as Exception;
- if (ex != null) throw ex;
- // A non-wrapped Lua error (best interpreted as a string) - wrap it and throw it
- if (err == null) err = "Unknown Lua Error";
- #if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR
- toLuaError toLua = LuaVM.Instance.luaEnv.Global.GetInPath<toLuaError>("reportError");
- toLua(err.ToString());
- #endif
- throw new LuaException(err.ToString());
- #if THREAD_SAFE || HOTFIX_ENABLE
- }
- #endif
- }
会同时抛出c#的exception,这样c#的栈才能正确处理
c#与lua交互里,错误处理的更多相关文章
- C++与Lua交互之配置&交互原理&示例
|Lua 简介 Lua 是一种轻量小巧的脚本语言,也是号称性能最高的脚本语言,它用C语言编写并以源代码形式开放. 某些程序常常需要修改内容,而修改的内容不仅仅是数据,更要修改很多函数的行为. 而修改函 ...
- C++与Lua交互(四)
引言 通过前几篇,我们已经对Lua的C API有了一定的了解,如lua_push*.lua_is*.lua_to*等等.用C++调用Lua数据时,我们主要运用lua_getglobal与lua_pus ...
- C++与Lua交互(一)
引言 之前做手游项目时,客户端用lua做脚本,基本所有游戏逻辑都用它完成,玩起来有点不爽,感觉"太重"了.而我又比较偏服务端这边(仅有C++),所以热情不高.最近,加入了一个端游项 ...
- C++与Lua交互(二)
上一篇我们搭建好了整个的项目环境,现在,我们一起探索一下如何将lua寄宿到C++中. 宿主的实现 我们在LuaWithCPPTest项目下,查看Source.cpp代码如下: #include < ...
- 最优雅的C++跟lua交互.
我先来吐槽一下我们这个项目. 我是做手机游戏的, cocos2dx引擎, lua编码. 这本来是一件很欢快的事情, 因为不用接触C++. C++写久了的人写lua, 就会感觉任督二脉被打通了, 代码写 ...
- 教程二 网页和lua交互修改openwrt
硬件 http://zhan.renren.com/h5/entry/3602888498044209332 GL-iNet 1 首先安装 webserver之lighttpd ,openwrt自带 ...
- JSP数据交互习题错误总结
1:如果注册完页面有中文字符需要在提交后的页面显示注册信息,切记先把接受到的request的编码方式改为中文:request.setCharacterEncoding("utf-8" ...
- C++与Lua交互(三)
通过上一篇的热身,我们对C++调用lua变量有了一个认识,现在让我们再深入一点,去探索一下如何调用lua的函数.表. Lua与宿主通讯的关键--栈 lua是个动态脚本语言,它的数据类型如何映射到C++ ...
- Win32下 Qt与Lua交互使用(四):在Lua脚本中自由执行Qt类中的函数
话接上篇.通过前几篇博客,我们实现在Lua脚本中执行Qt类中函数的方法,以及在Lua脚本中连接Qt对象的信号与槽. 但是,我们也能发现,如果希望在Lua脚本中执行Qt类的函数,就必须绑定一个真正实现功 ...
随机推荐
- 转:SNMP 原理及配置简述
SNMP 原理及配置简述 转载 2016年01月13日 16:18:51 随着机器数量的增长,管理员不能像过去那样,一台台机器进行监控.解决问题,而需要借助各方工具进行统一监控和管理.利用SNMP,一 ...
- 筛选git最后一次文件列表
需要写一个小程序,列出出最后一次git提交的文件列表 命令如下: git log -1 --name-only 操作后,发现并不能完整的显示文件列表,查询google后,发现是git默认配置只显示90 ...
- python操作sqlserver
# coding=gbk import sys import pymssql #尝试数据库连接 try: conn = pymssql.connect(host="192.168 ...
- 给input元素换样式
浏览器默认的<input type="file">真是巨丑无比,搜了很多之后知道原来是可以把这个设置成透明的! 不过这样比较麻烦,需要将input标签对应的区域设置成和 ...
- 在Django中使用F()函数
F()允许Django在未实际链接数据的情况下具有对数据库字段的值的引用.通常情况下我们在更新数据时需要先从数据库里将原数据取出后方在内存里,然后编辑某些属性,最后提交.例如这样 # Tintin f ...
- 如何输出long double?
首先long double是C99引入的,但是如何printf格式化一个long double的数据的呢? scanf一个double数据,是%lf,printf一个float或者double都是%f ...
- ExtFormReturn,ext
package cn.edu.hbcf.common.vo; public class ExtFormReturn { /** * 是否成功 */ private boolean success; / ...
- RxBinding -- 官网说明
RxBinding -- 官网说明 新建 模板 小书匠 作用 组件 平台绑定 support-v4 绑定 appcompact-v7 绑定 design 库绑定 recyclerview-v7 绑定 ...
- nginx 为什么要反向代理 影藏后端 高效连接(给nginx,他自己返回) 端口冲突解决 多个服务
nginx 为什么要反向代理 影藏后端 高效连接(给nginx,他自己返回) 端口冲突解决 多个服务 单机使用反向代理可以根据不同url匹配到不同站点 rsync 的工作原理和应用实例 ...
- ARGOX 力象 OS-214Plus 条码打印机 B/S 打印
官网demo下载地址: http://www.argox.com.cn/servicedev/5/c 页面中嵌入activeX控件: <object id="ArgoxPrinter& ...