-
Notifications
You must be signed in to change notification settings - Fork 99
/
Copy pathsample5.cpp
70 lines (50 loc) · 1.77 KB
/
sample5.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// sample5.cpp : Defines the entry point for the console application.
//
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
};
#include "lua_tinker.h"
void show_error(const char* error)
{
printf("_ALERT -> %s\n", error);
}
int main()
{
// Lua 를 초기화 한다.
lua_State* L = lua_open();
// Lua 기본 함수들을 로드한다.- print() 사용
luaopen_base(L);
// lua_State* 가 갖고있는 현재의 스택을 보여준다.
printf("%s\n","-------------------------- current stack");
lua_tinker::enum_stack(L);
// 스택에 1을 밀어넣는다.
lua_pushnumber(L, 1);
// 현재 스택의 내용을 다시 출력한다.
printf("%s\n","-------------------------- stack after push '1'");
lua_tinker::enum_stack(L);
// sample5.lua 파일을 로드/실행한다.
lua_tinker::dofile(L, "sample5.lua");
// test_error() 함수를 호출한다.
// test_error() 는 실행중 test_error_3() 호출을 시도하다 에러를 발생시킨다.
// 함수 호출중 발생한 에러는 printf()를 통해서 출력된다.
printf("%s\n","-------------------------- calling test_error()");
lua_tinker::call<void>(L, "test_error");
// test_error_3()는 존재하지 않는 함수이다. 호출 자체가 실패한다.
printf("%s\n","-------------------------- calling test_error_3()");
lua_tinker::call<void>(L, "test_error_3");
// printf() 대신 유저가 제공하는 에러 출력 루틴을 사용할 수 있다.
// 이 에러처리 함수는1개의 루아 문자열로 발생한 에러를 전달하게 된다.
// C++ 에서 등록할 경우 void function(const char*) 형태가 적합하다.
lua_tinker::def(L, "_ALERT", show_error);
lua_tinker::call<void>(L, "_ALERT", "test !!!");
// test_error() 함수를 호출한다.
// 함수 호출중 발생한 에러는 Lua에 등록된 _ALERT()를 통해서 출력된다.
printf("%s\n","-------------------------- calling test_error()");
lua_tinker::call<void>(L, "test_error");
// 프로그램 종료
lua_close(L);
return 0;
}