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