使用LuaBind将C ++类导出到Lua时发生访问冲突

时间:2009-12-24 11:12:03

标签: c++ class lua export luabind

我正在尝试使用LuaBind将一个简单的类导出到Lua。我从两个站点获取了代码,这些代码的表现大致相同,但它仍然失败了。

// Default headers
#include <iostream>
#include <string>

// Lua headers
extern "C" {
    #include "lua.h"
    #include "lualib.h"
    #include "lauxlib.h"
}

#include "luabind/luabind.hpp"

// Sample class
class NumberPrinter
{
public:
    NumberPrinter( int number ) : m_number( number ) {}
    void print() { std::cout << m_number << "\n"; }

private:
    int m_number;
};

int main() {
    // Create Lua state and load sample file
    lua_State *luaState = lua_open();
    luabind::open( luaState );

    // Set up bind to number class
    luabind::module( luaState ) [
        luabind::class_<NumberPrinter>( "NumberPrinter" )
            .def( luabind::constructor<int>() )
            .def( "print", &NumberPrinter::print )
    ];

    // Use the class in Lua
    luaL_dostring( luaState,
        "Print2000 = NumberPrinter(2000)\n"
        "Print2000:print()\n"
    );

    // Clean up Lua state
    lua_close( luaState );

    getchar();
    return 0;
}

运行该代码时,luabind :: module会导致以下运行时错误,并且在调试模式下没有其他信息:

  

0x690008f5处的未处理异常   Lua Playground.exe:0xC0000005:访问   冲突。

1 个答案:

答案 0 :(得分:1)

我建议您从this website获取二进制文件和样本VS2008解决方案。它具有您尝试运行的完全相同的示例代码(减去拼写错误),并且它在我的机器上运行良好。如果它仍然不起作用,您将需要Lua社区的帮助。可能需要一个minidump来帮助他们诊断这个,只是异常消息是不够的。