如何使Lua“写入器”(C++版)
2014-3-27 19:58:7
收藏:0
阅读:130
评论:2
我正在尝试制作一个存储 Lua 编译脚本的内存系统。 问题是我无法创建 "lua_Writer" ,且变量 bytecode 为空。我正在使用 Luajit。 以下是我的代码。
typedef struct {
size_t *len;
char **data;
} BS_DESCRIP;
int scriptMemoryWriter(lua_State* ls, const void* p, size_t sz, void* ud)
{
BS_DESCRIP* bd = (BS_DESCRIP*)ud;
char* newData; = (char*)realloc(*(bd->data), (*(bd->len)) + sz);
if(newData)
{
memcpy(newData + (*(bd->len)), p, sz);
*(bd->data) = newData;
*(bd->len) += sz;
} else {
free(newData);
return 1;
}
return 0;
}
void HScriptManager::compileToMemory(HScript* script)
{
char* bytecode = 0L;
size_t bytecode_len = 0;
BS_DESCRIP bd = {&bytecode_len, &bytecode};
int buff_ret = luaL_loadbuffer(m_pLuaState, script->getData().c_str(), script->getBuffSize(), script->getName().c_str());
int comp_ret = lua_dump(m_pLuaState, scriptMemoryWriter, &bd);
lua_pop(m_pLuaState, 1);
std::cout << "bytecode_len: " << bytecode_len << std::endl;
std::cout << "bytecode: " << bytecode << std::endl;
std::cout << "buff_ret: " << buff_ret << std::endl;
std::cout << "comp_ret: " << comp_ret << std::endl;
}
变量 bytecode 不完整。查看下面的截图。
注:我没有编写此 "Writer"。 抱歉我的英语不好...
点赞
用户869951
我要假设你在问题中的 char* newData; = (char 只是打字错误,因为这样的代码不会编译。
我认为问题在于你试图将字节码打印为字符串。如果你给一个 std 流(比如 std::cout)一个字符指针,这个流会打印所有的字符,从那个内存位置开始,直到在那个内存地址之后找到的第一个空字符。现在我从来没有看过 Lua 字节码,但我怀疑 Lua 字节码可能包含空字节,这将导致打印结果不完整。在你那个“完整”的例子中,只是碰巧没有空字节。
由于很多字节码都是不可打印的字符,所以你最好打印它们的十进制值。用下面的代码替换 std::cout << "bytecode: " << bytecode << std::endl;:
std::cout << "bytecode: ";
for (int i=0; i<bytecode_len; i++)
std::cout << int(bytecode[i]) << " ";
std::cout << std::endl;
2014-03-27 21:58:40
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
不要在
char* newData;后面加上;。正确的形式是:
char* newData = (char*)realloc(*(bd->data), (*(bd->len)) + sz);尽管如此,我仍然不确定它能否正常运行。