'tolua++'에 해당되는 글 1건

  1. 2007/07/06 tolua++ 사용법 (2)

tolua++ 사용법

프로그래밍 : 2007/07/06 23:55
tolua++이란 c++로 작성된 클래스를 루아에서 바로 접근 할수 있도록 지원해주는 일종의 툴이다.

원래는 tolua라고 하여 c로된 코드만 지원하는 것을 확장한게 tolua++이다.

라이브러리가 아니라 툴이라는 것은..

프로그램적으로 클래스를 바로 루아에서 접근 할 수 있도록 지원해주는 라이브러리가 아니라 직접 클래스의 헤더를 파싱해서 루아에서 접근 할 수 있는 일종의 라이브러리 코드를 생성해주는 툴이다..

tolua++은 직접 헤더를 파싱해서 c++코드를 생성해주는 tolua++.exe라는 툴과, 이 툴이 만들어내는 코드에서 내부적으로 루아에 바인딩을 지원해주기 위한 자체 라이브러리가 있다.

사용방법은 우선 툴을 이용하여 루아와 바인딩을 할 헤더를 가지고 코드를 생성한다.
그리고 이 코드를 프로젝트에 포함하여 같이 컴파일을 하고 링크를 할 때 tolua++이 내부적으로 사용하는 자체 라이브러리를 링크해주면 된다.

예를들어 아래와 같은 코드를 루아에서 접근 할 수 있도록 하고 싶다고 하자.

class B
{
public:
  B();
  ~B();
  int getInt();

private:
  int m_int;

};

class A
{
public:
  A(){}
  ~A(){}
  B* getB();

private:
  B m_b;

};


이 코드에서 루아와 바인딩 하기 위한 부분을

// tolua_begin
// tolua_end

으로 감싸준다..

바로 아래와 같이 하면 된다.

// tolua_begin
class B
{
public:
  B();
  ~B();
  int getInt();
// tolua_end

private:
  int m_int;
// tolua_begin
};

class A
{
public:
  A(){}
  ~A(){}
  B* getB();

// tolua_end
private:
  B m_b;
// tolua_begin
};
// tolua_end


위의 코드와 같이 // tolua_begin// tolua_end로 감싸주면 된다.
위의 코드를 보면 private 부분은 포함시키지 않았다. 사실 private는 외부에서 접근이 불가능하므로 포함을 시켜봤자 툴이 생성한 코드를 컴파일 하면 컴파일 에러가 나므로 사실 필요가 없다.

이 헤더파일을 이제 툴을 이용해서 코드를 생성해 내면 된다.
툴 사용법은 아래와 같다.

tolua++ -n 이름 -H 생성할헤더파일이름 -o 생성할코드파일이름 파싱할헤더

만약에 위의 코드를 class.h라고 저장하고 test라는 식별자로 코드를 생성하고자 한다면
아래와 같이 하면 된다.

tolua++ -n tolua -H classlua.h -o classlua.cpp class.h  

그러면 아래와 같은 코드가 생성이 된다.

classlua.h

more..


classlua.cpp

more..


이렇게 생성된 코드를 프로젝트에 포함하고 루아 state를 초기화 하는 부분에 위의 classlua.h에 선언된 tolua_tolua_open 함수를 호출해주면 된다.

#include "stdafx.h"
#include "lua.hpp"
#include "tolua++.h"
#include "classlua.h"


int _tmain(int argc, _TCHAR* argv[])
{
  lua_State *p = lua_open();

  luaL_openlibs(p);
  tolua_tolua_open(p);

  if (luaL_dofile(p, "do.lua"))
  {
    printf("%s", lua_tostring(p, -1));
  }

    return 0;
}


그리고 위의 코드에 나온데로(luaL_dofile(p, "do.lua")) 루아를 그냥 쓰면 된다.

do.lua
a = A:new(); -- A *pA = new A;

b = a:getB(); -- B *pB = pA->getB();
c = b:getInt(); -- int c = pB->getInt();
print(c); -- printf("%d", c);

windows용 tolua++ 툴 & 라이브러리 (vs8용 x86, x64)



tolua++ 홈페이지
http://www.codenix.com/~tolua/

tolua 매뉴얼
http://www.tecgraf.puc-rio.br/~celes/tolua/tolua-3.2.html
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/07/06 23:55 2007/07/06 23:55