LuaBind 和 package.loadlib

我正在尝试按照这里的 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 中加载函数?

原文链接 https://stackoverflow.com/questions/10561159

点赞
stackoverflow用户734069
stackoverflow用户734069

package.loadlib文档的前两个句子:

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

(强调添加)

这并不 执行 funcname,而是将它作为一个函数返回供您调用。您仍然需要调用它:

package.loadlib("LuaTestLib.dll", "init")()
2012-05-12 06:36:05