Neko:Lua

비쥬얼 C++에 루아 연동시키기-

by Saber posted Jan 02, 2010
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

여기에 있는 루아의 강좌중 가장 필요한게 없는거 같아서 올려봅니다.

 

루아의 문법을 아무리 잘 알고 있다고 하더라도 정작 C++에 연동시키는 법을 모르면

 

아무 쓸모가 없겠죠??

 

일단 제가 루아 홈페이지에 가서 루아 스크립트를 다운받았는데..  소스통째로 던져주네요 -_-;;

 

루아 원본 소스를 받으시고 싶으신분들은 http://www.lua.org 를 참조해주세요!

 

그나저나 이렇게 소스를 통째로 주면 사용하기가 약간 귀찮습니다.

 

 그래서 제가 정리해서!!!  라이브러리로 만들었습니다.

 

루아스크립트 버젼은 5.1.4버젼입니다.

 

클릭해주세요 Rua.zip  <---

 

다운받아서 C드라이브에 압축을 풀어주세요.

 

강좌도 C드라이브에 압축을 풀었다는 가정하고 진행하겠습니다.

 

일단 이것을 비쥬얼 C++에서 사용 할수 있게 하려면!!

 

("저는 비쥬얼 스튜디오 2008을 기반으로 설명을 하겠습니다.")

 

 

1. 비쥬얼 스튜디오 헤더파일과 LIB파일을 지정해주기!!

도구 -> 옵션을 눌러주세요!!

 

1.JPG

 

 

 

 

프로젝트 및 솔루션 ->  VC++  디렉터리를 클릭하시면 다음파일의 디렉터리 표시라는 메뉴가 보이지요!? 여기서

 

포함파일을 선택한후 제가 올려놓은 루아 라이브러리의 include 폴더의 경로를 여기에 적어주세요!~!!

 

2.JPG

 

그 다음  "다음 파일의 디렉터리 표시" 메뉴에서 라이브러리 파일을 선택하시고 제가 올려놓은 루아 라이브러리의 lib폴더의 경로를

 

지정해주세요!!

 

3.JPG

 

 

일단 이렇게 되면 컴파일러 자체의 설정은 끝났습니다만..

 

우리가 프로그램을 만들때 프로젝트 단위로 만듭니다.  새로운 프로젝트를 생성할때마다  루아 라이브러리 파일을

 

사용하겠다고 알려주어야 합니다!!

 

제가 만든 프로젝트 이름이 STL_Guid라고 되어 있는데 신경쓰지마세요 -ㅅ-

(STL공부하던중에 한거라 후후후-)

 

어쨋든 프로젝트 -> 속성을 클릭하세요 단축키로 ALT +F7을 누르셔도 상관 없습니다.

 

4.JPG

 

 

다음과 같은 창이 나오는데요 여기서    구성속성  ->   링커   ->  입력  -> 추가종속성에  Rua.lib 라고 적어주시면

 

루아스크립트를 사용하기 위한 준비는 끝났습니다. 이제는 rua코드를 작성하기만 하시면 됩니다!!

5.JPG

 

 

 

 

샘플

 

 

#include <stdio.h>

#include <string.h>

 extern "C"

{

#include "lua.h"

#include "lauxlib.h"

#include "lualib.h"

}

 

 

int main(void)

{

           char buff[256];

           int error;

           lua_State *L = luaL_newstate();  //루아를연다.

           luaL_openlibs(L);   //루아표준라이브러리를연다.

 

           while(fgets(buff, sizeof(buff), stdin) != NULL)

           {

                     error =luaL_loadbuffer(L, buff, strlen(buff), "line") ||

                                lua_pcall(L, 0, 0, 0);          

                     if(error)

                     {

                                fprintf(stderr, "%s", lua_tostring(L, -1));

                                lua_pop(L, 1);      //스택으로부터오류메시지를뽑아낸다.

                     }

           }

           lua_close(L);

           return 0;

}

 

 

저는 소스를 이렇게 작성하고 컴파일 (F7키) 누르고 실행해보았습니다.   실행단축키 Ctrl + F5

 

자아 밑에 엠피님이 사용했던 문법을 그대로 타이핑 해보았지요

  7.JPG

 

a = print

a("루아는 마법사이다")

라고 치니

 

루아는 마법사입니다 라는 글이 콘솔창으로 나오는것을 확인 할수 있습니다.

 

여담으로 함수도 변수로 관리한다고 느낄수 있지만.. 사실은 이 함수의 포인터로 관리한다는 것입니다.

 

사실 이것을 C언어로도 표현할수도 있습니다.

 

#include <stdio.h>

 

int main()

{

           puts("나는마법사이다") ;

 

           int (*a) (const char*) = puts ;

 

           a("나는마법사이다.");

 

 

           return 0;

}

 

다음 스샷과 같이 제대로 나오는 것을 알수 있습니다.

8.JPG

 

하지만 루아 스크립트언어와는 달리 명시적으로 함수의 리턴인자의 타입과 매개변수의 타입및 갯수를 정확히 일치 시켜줘야 합니다.

 

 

 

루비언어의

 

a = print

 

함수 포인터의 선언과 정의방법

 

 

 

 

C/C++의

 

int (*a) (const char*) = puts ;

 

함수 포인터선언 방법

 

어떤게 더 간결하고 편해보이는지는 대충봐도 느낌을 올껏입니다.

이래서 스크립트언어가 편하다는 말을 많이 하는건가 봅니다!

 

 

 

 

TAG •