gpt4 book ai didi

C++如何制作lua "writer"

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:22 26 4
gpt4 key购买 nike

我试图制作一个系统,用于将 lua 编译脚本存储在内存中。问题是我不能做一个“lua_Writer”,变量字节码是空的。我使用 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;
}

变量内容字节码不完整。看

Incomplete

Complete

注意:这个“Writer”不是我做的。对不起英语...

最佳答案

第 9 行:char* newData; = (char*)realloc(*(bd->data), (*(bd->len)) + sz);

不要在 char* newData 之后放置 ;

这是正确的:

char* newData = (char*)realloc(*(bd->data), (*(bd->len)) + sz);

虽然,我仍然不确定它是否会起作用。

关于C++如何制作lua "writer",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22694316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com