Нарушение прав доступа при экспорте класса C ++ в Lua с использованием LuaBind - PullRequest
1 голос
/ 24 декабря 2009

Я пытаюсь экспортировать простой класс в Lua, используя LuaBind. Я взял код с двух сайтов, который показал примерно одинаковый способ сделать это, но он все еще не работает.

// 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 Ответ

1 голос
/ 24 декабря 2009

Я бы посоветовал вам начать с бинарных файлов и примера решения VS2008, доступных на на этом сайте . У него точно такой же пример кода, который вы пытаетесь запустить (за исключением опечаток), и он хорошо работал на моей машине. Если это все еще не работает, вам понадобится помощь сообщества Lua. Вероятно, требуется мини-дамп, чтобы помочь им диагностировать это, просто недостаточно сообщения об исключении.

...