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
Tag
사용자 삽입 이미지


기다리고 기다리던 PIL2 번역본이 나왔군요.!
강x닷컴에서 예약을 하고 있습니다.

산뜻한 노란색 디자인이 마음에 드는군요 ㅎㅎ

번역자님 그리고 인사이트 출판사 관계자 여러분들과 저와 참여하신 다른 리뷰어분들 모두 수고하셨습니다!!
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/06/20 15:15 2007/06/20 15:15
사용자 삽입 이미지

PIL(Programming in Lua)2 번역본의 리뷰어로 선정되었습니다..

PIL원서 관련 포스팅

개인적으로 좋아하는 언어이고 국내에 거의 유일한 책의 번역본을 리뷰할수 있는 기회를 제공해주신 번역자님께 깊은 감사를 드립니다.

사실 리뷰어로 선정된건 좀 됬는데..
어쩌다보니 이제서야 포스팅을 하게됬네요..

제가 맡은 부분은 루아의 거의 마지막 부분인 C API부분과 응용부분입니다..
거의 300페이지 가량 되는 분량인데 절반정도 끝냈군요..

리뷰어로 선정되고 갑자기 일이 터져 바쁜 와중에 할려니 힘이들긴 합니다만..
그래도 맡은 일이고 스스로 애착이 가는 책이므로 열심히 할겁니다..

아.. 리뷰를 한다고 해서 저에게 떨어지는 금전적인 것은 한푼도 없습니다. :)
순전히 봉사적 차원이며 사회 공헌의 한 부분입니다. ㅎㅎ
있다면 나중에 책이 출간면 리뷰어에게 한권씩 증정된다고 하더군요..


크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/03/20 21:09 2007/03/20 21:09
근 몇일간 늦은 시간까지 루아 인터페이스 함수들을 만들었다..

루아와 C++과 데이터를 주고 받기 위해서 스택 개념을 사용하고 있기 때문에 굉장히 노가다성 코딩이 많다.. 대략 아래와 같은 코드들이다.-_-

more..



요딴식의 코드들이 들어갈 수 밖에 없다.. 사실 예전에 루아가 아닌 커스텀 스킨 로더를 만들었을 때에도 그닥 위와 같은 형태와 크게 다르진 않았지만.. 루아의 경우에는 추가로 스택관리까지 해주는 코드까지 들어가야해서.. 꽤나 머리가 아팠다..

우선은 모든 컨트롤의 생성 인터페이스 함수와 삭제 인터페이스 함수는 완료가 되었고.. 텍스쳐 세팅 함수들을 만들고 있다.
커서, 캐럿, 아이콘, 다이얼로그, 프로그래스바, 버튼까지는 완성이 된 상태이다..
지금 가장 난관이 콤보박스인데, 콤보박스가 버튼, 에딧박스, 리스트박스 이렇게 3개로 구성되어있어서 텍스쳐 데이터를 불러오는 코드가 무려 3배나 많다.. 대략 스크롤을 해도해도 끝이 안보더군...

대략 아래와 같은 분량을 수정을 해야한다.. 참고로 스크롤 압박이 무지 심하므로 성질 급한 사람은 누르지 말길 바란다.

more..



사실 위의 코드는 1/3에 지나지 않는다.. 전부 올릴려고 했는데 블로그 글 입력 에딧박스 용량 때문에 중간에 잘려서 올리지를 못한다-_-);


어서 텍스쳐부분 인터페이스를 마쳐야겠다.. 그래야지 GUI 시스템 컨트롤 인터페이스 함수를 만들테니 말이다..

ps.오늘은 캐럿 때문에 좀 삽질을 했다.. 캐럿이 분명 화면에 출력되는 코드에서 true를 퉤뱉는데도 화면에 안나오는 것이었다.. 나중에 알고보니 캐럿 넓이값이 기본적으로 0으로 세팅되어있어서 안나오는거였다-_-... 아.. 이런 바보..
ps2. 아!!! 500개나 되는 함수 언제 다 만든데!!!!! 아악..
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2006/04/16 17:39 2006/04/16 17:39
Tag


Programming in Lua, Second Edition 가 나왔다..
루아 공식홈페이지(http://lua.org)에 볼게 있어서 오늘 잠시 들렀다가 안 사실이다..

이번에 새롭게 루아가 5.1로 마이너업그레이드 되면서(버전만 마이너업그래이드인 듯.. 내부적으로는 좀 더 많은 기능들이 개선되고 지원하는데 말이다..)그에 맞게 새롭게 책을 쓴듯 한다.

책 표지는 파란색바탕에 루아 특유의 로고가 흰색으로 들어가서 깔끔하면서 신비감이 느껴진다.

가격은 외국에서는 $22~$25 정도 하는데 강컴에서 검색해보니 무려 15%를 할인하고도 42000원이다.. 덜덜..

배송기간도 15~20일이라는데.. 지금 주문해도 한달 후에나 받아볼수 있다니.. 쩝...

그런다고 번역본을 기다릴 수도 없고..(언제 번역본이 나올지도 모르는 사실이고...) 매우 고민이다..

하루만 더 고민해보고 지를지 말지 결정해야 하겠다-_-);

BOD(Buy or Die)!!!

ps. 아.. 이 글을 쓰고 금방 안 사실이다.. 대략 올해 7월쯤에 번역본이 나올 예정이라고 한다.. http://gpgstudy.com/forum/viewtopic.php?t=10265
ps2. 결정했다.. 비싸더라도 질러야겠다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2006/04/07 23:21 2006/04/07 23:21