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

Access violation when exporting a C++ class to Lua using LuaBind

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// 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 <<"\
"
; }

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)\
"

       "Print2000:print()\
"

    );

    // Clean up Lua state
    lua_close( luaState );

    getchar();
    return 0;
}

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

Unhandled exception at 0x690008f5 in
Lua Playground.exe: 0xC0000005: Access
violation.


我鼓励您从此网站上提供的二进制文件和示例VS2008解决方案开始使用。 它具有与您尝试运行的示例代码完全相同的示例代码(减去输入错误),并且在我的机器上运行良好。 如果仍然无法使用,则需要Lua社区的帮助。 可能需要一个小型转储来帮助他们进行诊断,仅异常消息是不够的。