首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在lua LuaBridge Love2D中运行C++主函数的Love2D

在lua LuaBridge Love2D中运行C++主函数的Love2D
EN

Stack Overflow用户
提问于 2016-05-22 21:12:59
回答 1查看 502关注 0票数 0

下面是我的C++主函数:

代码语言:javascript
复制
int main() {
lua_State* L = luaL_newstate();
luaL_openlibs(L);
getGlobalNamespace(L).
        beginNamespace("o").
            beginClass<Object>("Object").
                addConstructor<void (*) (double, double)>().
                addProperty("width", &Object::getWidth, &Object::setWidth).
                addProperty("height", &Object::getHeight, &Object::setHeight).
                addProperty("x", &Object::getX, &Object::setX).
                addProperty("y", &Object::getY, &Object::setY).
            endClass().
        endNamespace();
lua_pcall(L, 0, 0, 0);
luaL_dofile(L, "main.lua");}

这是我的Love2D main.lua

代码语言:javascript
复制
function love.load()
   obj = o.Object(10, 20) end

当我尝试用love运行它时,它告诉我obj是一个空值,我意识到Love2D不会运行C++中的main函数来创建object类。如何在Lua中使用LuaBridge调用C++主函数?

EN

回答 1

Stack Overflow用户

发布于 2016-05-22 22:55:29

您正在做的是使用两个独立的程序:一个是使用“主函数”构建的程序,另一个是实际的Love2D可执行文件。它们是独立的可执行文件;它们之间的关系并不比lua.exepython.exe的关系更密切。

您似乎想要做的是编写一个Love2D使用的C++库。您可以这样做,但它要求您编写动态库,而不是C++程序。您必须编写一个Lua C模块。

如何编写动态库取决于您选择的平台。但是该动态库必须导出适当的函数,如the Lua 5.1 documentation中所述。如果您的C模块名为"test",那么它必须导出一个名为luaopen_test的函数。

这个函数的工作本质上就是你的main所做的。您的luaopen_函数不必创建一个Lua状态;它将被赋予一个状态。它的任务是返回一个表,其中包含要在模块中导出的函数和API。因此,它会根据需要向Lua注册所有内容。

您的main将其内容放在全局“名称空间”中,但这通常被认为是相当粗鲁的。更好的方法是构建一个本地表,并将您的东西放在那里,返回表作为返回值。我不熟悉LuaBridge的API,所以我不知道该怎么做。

最糟糕的情况是,您可以像当前一样构建一个全局表,但是在构建它之后,将其加载到本地表中,清除全局条目,然后返回表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37374823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档