2009-12-24 2 views
1

LuaBind를 사용하여 Lua로 간단한 클래스를 내보내려고합니다. 코드를 두 사이트에서 가져 와서 대략 같은 방법으로 보여 주지만 여전히 실패하고 있습니다. LuaBind를 사용하여 C++ 클래스를 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 때 :: 모듈은 다음과 같은 런타임 오류가 발생하고 디버그 모드에서 다른 정보가 없습니다 :가 0xc0000005 : 루아 Playground.exe에서 0x690008f5에서

처리되지 않은 예외를 액세스 위반.

답변

1

this website에서 사용할 수있는 바이너리 및 샘플 VS2008 솔루션으로 시작하는 것이 좋습니다. 그것은 당신이 (오타를 뺀) 실행하려고하는 정확한 동일한 샘플 코드를 가지고 있으며 내 컴퓨터에서 잘 작동합니다. 그래도 작동하지 않는다면 루아 커뮤니티의 도움이 필요합니다. 미니 덤프는 진단을 돕기 위해 필요할 것이지만 예외 메시지만으로는 충분하지 않습니다.

+0

더 구체적으로 Luabind 커뮤니티입니다. 메일 링리스트에 오신 것을 환영합니다 : https://lists.sourceforge.net/lists/listinfo/luabind-user –

+0

무슨 말을하는거야? – Overv

+0

링크 된 블로그 게시물의 내용입니다. –