1

我正在尝试使用 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 中的函数?

4

1 回答 1

2

package.loadlib从's 文档的前两句:

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

(重点补充)

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

package.loadlib("LuaTestLib.dll", "init")()
于 2012-05-12T06:36:05.803 回答