336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
기획자가 있는 프로젝트라면 스크립트를 통해서 다시 컴파일 안고

세부 설정을 바꾸는게 무지 편하다

그래서 C++관련 프로젝트에서는 루아를 많이 쓴다

라이브러리 컴파일이나 기타는 우선 넘어가고

간단하게 사용법을 코드로 알아 본다

-------------------------------------------------------------------------

//루아에 필요한 헤더들

//루아 관련 헤더 부르는데 이렇게 않하면

//링크 오류 떨어집니다 인터넷의 일부 문서는 이게 빠져서 고생시키죠

 extern "C" {
    #include <lua.h>
    #include <lualib.h>
    #include <lauxlib.h>
}


// 루아스크립트를 사용하기 위한 객체
lua_State* g_pLuaSt;

 

//어느 샘플에서 얻은 소스 일부 입니다 귀찮아서 땡겨 쓰기

void InitLua()
{
 printf("[C] InitLua Script... \n\n");

 // 루아스크립으를 Open.
 g_pLuaSt = lua_open();

 // 루아의 내부라이브러리 객체 생성.
 // load Lua libraries
 luaopen_base(g_pLuaSt);
 luaopen_io(g_pLuaSt);
 luaopen_math(g_pLuaSt);
 luaopen_string(g_pLuaSt);
 luaopen_table(g_pLuaSt);
 }

 

//화면에 printf하는걸 만들어서 루아쪽에서 호출할수 있게 해줍니다

 

static int lua_printf(lua_State *g_pLuaSt)
{

 //루아 통신은 가상스텍으로 합니다

 //스텝은 push , pop형테로 되어 있는 링크리스트 라고 생각 하시면 될거 같습니다.

 //자세한 내용은 C관련 책에 무지 많이 나오니 말주변도 없는 전 이정도만...

 

 //스텍의 탑에는 넘긴 변수의 갯수가 들어 있습니다.

 //어셈이랑도 비슷한듯

 

 //탑을 얻어서 넘긴 변수가 없으면
 int n = lua_gettop(g_pLuaSt);
 if(n < 1)
 {

  //루아쪽에 오류를 알립니다.

  //루아쪽 스텍에 숫자를 하나 넣습니다.
  lua_pushnumber(g_pLuaSt, 0);   // push 0번

  //루아쪽 호출 함수의 리턴은 위의 push의 갯수입니다.

  //위에서 lua_push 관련 함수를 하나 썼으니 1을 리턴하는게 맞겠죠
  return 1;
 }


 char szMessage[256];
 memset(szMessage, 0, sizeof(szMessage));

 //루아 스텍에서 string을 복사해서
 strcpy(szMessage, lua_tostring(g_pLuaSt, 1));

 //화면에 찍고

 printf("%s\n" , szMessage);

 //화면이 정상적으로 작업 했다는걸 알리고
 lua_pushnumber(g_pLuaSt, 1);   // push 1번

 //총 한개를 push했다고 알려 줍니다.
 return 1;
}

 

void SetRegisterLua()
{
 //루아쪽에서 위에 코딩한 lua_printf를 사용할수 있게 선 정의 해줍니다.
 lua_register(g_pLuaSt, "lua_printf", lua_printf);
}

 

void ReleaseLua()
{
 printf("[C] ReleaseLua Script... \n\n");

 //루아 관련 정리
 lua_close(g_pLuaSt);
}

 

void main()
{

 InitLua();

 // 루아파일 open
 lua_dofile(g_pLuaSt, "test.lua");
 SetRegisterLua();


 //test.lua에서 함수를 얻어 옵니다.

 lua_getglobal(g_pLuaSt, "start");
 //실제 루아 함수를 콜합니다 input 인자는 0개 return 값은 1개
 lua_call(g_pLuaSt, 0, 1);

 // 리턴값을 구한다.
 int hr = (int)lua_tostring(g_pLuaSt, -1);

 // 스택을 초기화 한다.
 lua_pop(g_pLuaSt, 1);

 ReleaseLua();

}

<!--test.lua-->

function start()

 lua_printf("기본적인 루아 사용법을 보여 줍니다.\n");
 lua_printf("화면에 단순하게 표시 하지만 이걸 확장하면 여러가지를 할수 있죠\n");
end




+ Recent posts