LuaBridge在lua for Love2D中运行C++主功能
LuaBridge running C++ main function in lua for Love2D
这是我的C++主函数:
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 的主要软件
function love.load()
obj = o.Object(10, 20) end
当我尝试用love运行它时,它说obj是一个零值,我意识到Love2D没有在C++中运行我的主函数来创建对象类。如何使用LuaBridge在Lua中调用C++主函数?
您正在使用两个独立的程序:一个是使用"主函数"构建的程序,另一个是实际的Love2D可执行程序。它们是独立的可执行文件;它们彼此之间的关系不比CCD_ 1与CCD_。
您似乎想要编写一个由Love2D使用的C++库。你可以这样做,但这需要你写,不是C++程序,而是一个动态库。你必须编写一个Lua C模块。
如何编写动态库取决于您选择的平台。但是,该动态库必须导出适当的函数,如Lua 5.1文档中所述。如果您的C模块名为"test",那么它必须导出一个名为luaopen_test
的函数。
这个函数的工作本质上就是main
的工作。luaopen_
函数不必创建Lua状态;它将得到一个。它的工作是返回一个表,其中包含要在模块中导出的函数和API。因此,它根据需要向Lua注册所有内容。
您的main
将其内容放在全局"名称空间"中,但这通常被认为是非常粗鲁的。最好构建一个本地表,并将您的东西放在那里,将表作为返回值返回。我不熟悉LuaBridge的API,所以我不知道该怎么做。
最糟糕的情况是,您可以像当前一样构建一个全局表,但在构建后,将其加载到本地表中,清除全局条目,然后返回该表。
相关文章:
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 代码在main()中运行,但在函数中出现错误
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何在运行中期切换GTK CSS style_context
- 如何在MS Visual Studio 2019中运行QT UI
- 如何通过cpp程序运行shell脚本
- IPC使用多个管道和分支进程来运行Python程序
- 删除指向指针的指针是运行时错误吗
- 如何用参数值调用函数(仅在运行时已知)
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- c++中的指针和运行时错误
- 在C应用程序中运行C++(带有STL)函数
- 运行程序时出现问题
- 控制允许动态运行c++的并发操作数
- 无法获取菜单选择以运行函数.C++