세부 설정을 바꾸는게 무지 편하다
그래서 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
'글 > 코딩' 카테고리의 다른 글
UNICODE 기반에서 SendRequest 할시 방법 입니다 (0) | 2010.05.26 |
---|---|
VC++로 서비스 프로그램 작성 방법 입니다 (0) | 2010.01.25 |
현재 메모리에 올라가 있는 프로세스 확인하기 (0) | 2010.01.25 |
BugslayerUtil에 쓰는 파일들 입니다 (0) | 2010.01.25 |
VS2005 이상에서 UTF8 변환 과정 설명입니다 (0) | 2010.01.07 |