如何安全地从 Lua 中调用 C++ 函数
2018-1-28 17:39:37
收藏:0
阅读:114
评论:1
我在我的项目中使用 Sol2 并且在 Lua 中运行 C++ 函数遇到了一些麻烦。首先,我通过 sol::set_function() 将一些函数绑定到了 Lua。例如:
我有这个函数:
void PrintInt(int value){
std::cout << "Something" << std::endl;
}
在我的主程序中我这样做:
int main() {
sol::state state;
state.set_function("PrintInt", &PrintInt);
}
现在如果我在 Lua 中调用此函数,它工作得很好。但是我在我的游戏代码中有一些情况可能会产生一些意外的调用,例如在 Lua 中的这个调用:
PrintInt(nil)
所有的代码都是伪代码,所以不管怎么样都没有关系。这可能是因为 Lua 脚本是由玩家编写的。所以问题是:我如何避免这种情况发生?我不想强制玩家编写各种检查等。我在 C++ 中加载和运行脚本时进行了检查,但是它没有提供任何错误信息。我使用 sol::protected_function_result 来检查错误。我尝试使用 sol::optional,但是我获得了"Cannot find class '',to resolve delegate 'optional'" 的错误信息。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

感谢评论和神圣的 Sol2 文档!
解决方案非常简单明显:只需要阅读此文档:Sol2 Docs: config and safety。 之后只需像这样定义任何所需的触发器:
#define SOL_SAFE_USERTYPE 1。 你的定义应该处于第一位。之后你可以包括 sol.hpp:#define SOL_SAFE_USERTYPE 1 #include "sol.hpp"这就是你需要做的全部。