snowarrow 2015-03-12 06:06 采纳率: 0%
浏览 956

LuaBridge绑定字符串参数的函数失败

在LuaBridge中注册带有char* 作为参数的函数,会导致运行时的断言错误,例程如下:

 class A 
{
protected:
    char*   newname;
public:
    A(char* _name)
    {
        newname = _name;
    }

    std::string getName()
    {
        return this->name;
    }

    void printName()
    {
        printf("Hello, my name is %s!\n", this->newname);
    }
};

注册代码如下

 luabridge::getGlobalNamespace(L)
        .beginClass<A>("A")
                .addConstructor<void(*) (char *)>()
                .addFunction("getName", &A::getName)
                .addFunction("printName", &A::printName)
        .endClass();

在lua中的调用如下

 local b = A('moo')
b:printName()

然后运行时就会出现错误"assertion failed",如图所示
图片说明
此问题不仅出现在注册类的构造函数上,实际上,任何的试图注册带有char*类型的函数都会导致此错误,比如下面的代码

void UpdateMem(char* _mem)
{
    ...
    // manipulate the memory
}

请问有没有人遇见过这类问题,这样该如何解决传入指针,操作内存区的问题啊?
多谢!!

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-05-26 23:51
    关注

    该回答引用ChatGPT-3.5,仅供参考,不保证完全正确

    LuaBridge 在处理字符串参数时需要特殊注意,因为 Lua 中的字符串和 C++ 中的字符指针是不同的数据类型。在你的示例中,LuaBridge 尝试将 Lua 字符串传递给 C++ 函数,但这会导致错误。


    为了正确处理字符串参数,你可以使用 std::string 类型而不是 char* 类型作为参数。这样可以避免处理指针的问题,并且能够更好地与 Lua 字符串进行交互。


    以下是修改后的代码示例:

    class A {
    protected:
        std::string newname;
    public:
        A(const std::string& _name) {
            newname = _name;
        }
    
        std::string getName() {
            return this->newname;
        }
    
        void printName() {
            printf("Hello, my name is %s!\n", this->newname.c_str());
        }
    };
    
    luabridge::getGlobalNamespace(L)
        .beginClass<A>("A")
        .addConstructor<void(*) (const std::string&)>()
        .addFunction("getName", &A::getName)
        .addFunction("printName", &A::printName)
        .endClass();
    

    现在,你可以将 Lua 字符串作为参数传递给 A 类的构造函数和其他函数,并且不会遇到断言错误。请确保在 Lua 脚本中使用字符串时使用引号括起来,如 'moo'


    如果你确实需要传递指向字符数组的指针,并在 C++ 中直接操作内存区域,你可能需要使用 LuaBridge 的自定义类型转换功能来处理。这可能需要更复杂的代码,涉及将 Lua 字符串复制到 C++ 字符数组中,并在 C++ 中释放内存等操作。根据你的需求和使用情况,可能需要更详细的解决方案。

    评论

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效