【问题标题】:LuaBind and package.loadlibLuaBind 和 package.loadlib
【发布时间】:2012-05-20 15:05:19
【问题描述】:

我正在尝试使用 luabind 在这里完成教程,http://www.rasterbar.com/products/luabind/docs.html,但是我在加载库时遇到了问题。我目前正在使用 5.1 版的 lua,所以我相信我会使用 package.loadlib 而不是 loadlib。我做了一个简单的 dll,它是这样的:

#include <iostream>
#include <luabind\luabind.hpp>

void greet()
{
std::cout << "Hello world!\n";
}

extern "C" int init(lua_State* L)
{
luabind::open(L);

luabind::module(L)
    [
        luabind::def("greet", &greet)
    ];


return 0;
}

这构建得很好。但是,当我尝试运行此代码时,我在 lua 中遇到错误:

package.loadlib("LuaTestLib.dll", "init")
greet()

它声明 greet 是 nil。如何正确加载 dll 中的函数?

【问题讨论】:

    标签: lua luabind


    【解决方案1】:

    来自package.loadlib's documentation的前两句:

    将宿主程序与 C 库 libname 动态链接。在此库中,查找函数 funcname将此函数作为 C 函数返回

    (强调)

    这不会执行funcname。它只是将它作为一个函数返回给你调用。您仍然必须调用它:

    package.loadlib("LuaTestLib.dll", "init")()
    

    【讨论】:

    • 请注意,名称可能是 _init 或其他变体。
    猜你喜欢
    • 2012-07-11
    • 2011-09-16
    • 2021-12-31
    • 2012-03-16
    • 1970-01-01
    • 2011-09-23
    • 2012-05-13
    • 2012-07-20
    • 1970-01-01
    相关资源
    最近更新 更多