繁体   English   中英

C ++如何使Lua成为“作家”

[英]C++ How to make lua “writer”

我试图创建一个用于在存储器中存储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;
}

可变内容字节码不完整。

残缺

完成

注意:我没有执行此“编写器”。 对不起英语...

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

不要放; char* newData

这是对的:

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

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

我将假定为char* newData; = (char 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM