레조님의 글을 읽고 luatinker를 쓰기로 했었습니다.
다른 lua관련된거 여러개 찾아봤지만 luatinker가 일단 쓰기 편하게 보이더군요.
개발환경
- Lua 5.14
- LuaTinker 0.5d
- C++ Builder 2007
일단 Lua 5.14를 빌더에서 lib파일로 생성했습니다. 별 무리없이 걍 되더군요.
LuaTinker 0.5b로 하려다가 0.5d가 나왔더군요. 그래서 레조님의 글처럼 몇개 처리하고, 나머지 몇부분 더 나오더군요.
그것도 눈치것 수정해서 컴파일 되었습니다.
LuaTinker에서 샘플 6개를 한개씩 돌려보았습니다.
콘솔 화면 뜨면서 멈춥니다. 헉...
여기에서부터 이제 삽질이 시작됩니다.
VC++ 2008로 돌려봅니다. Lua5.14는 컴파일 되고, LuaTinker 0.5d 포함한 샘플프로젝트 에러 생깁니다.
프로젝트 옵션 이것 저것 변경해보고, 구글링해보고...도서관에가서 한권 있는 lua책 빌려보고,
결국 샘플 소스 컴파일 완료...짜잔 콘솔에서 잘 돌아갑니다.
흠 그러면 VC++에서 DLL파일 만들어서 빌더에서 써야겠군.하고 생각하고,
VC++에서 DLL파일 만들어봅니다. 한개씩 lua함수 올려봅니다.
일단 간단하게 open, close 잘됩니다.
그리고 함수 등록하는 소스 넣어보니 컴파일 안됩니다.
에러사항 구글링 해보니 lib파일로 하라고 하더군요. 그래서 겨우 lib로 해서 짜잔 컴파일이 되었습니다.
그런데 빌더로 lib파일 가져오려니 coff2omf가 안되어요...이것은 결국 DLL과 같은 것만 잘 되네요.
결국 이것저것 돌려보다가 포기.
다시 빌더로 옵니다.
멈춘 부분이 왜 멈출까? 하고 궁금해집니다.
디버그로 Lua를 컴파일해서 샘플소스 다시 돌려봅니다.
엄청난 함수안에 함수들을 추적끝에 결국 찾아내었습니다.
Lua라이브러리의 lbaselib.c에 luaB_print함수에서 fputs(s, stdout); -----------이 부분...
Lua에서 print하면 이곳에서 콘솔에 인쇄되는 부분같은데...이곳에서 홀딩입니다.
그런데 함수 주석에
/*
** If your system does not support `stdout', you can just remove this function.
** If you need, you can define your own `print' function, following this
** model but changing `fputs' to put the strings at a proper place
** (a console window or a log file, for instance).
*/
이렇게 되어 있더군요.
그래서 걍 fputs부분만 날렸습니다.
드디어 실행이 됩니다.
물론 Lua소스에서 print부분은 안되지만 나머지 로직은 다 살아났습니다.
샘플 1부터 6까지 모두 됩니다. ㅎㅎ 만세!
한 이틀동안 빌더는 왜이리 이런걸가 잘 안될까...불평하고 있었는데...
LuaTinker가 멋지군요.
클래스 함수도 콜백이 되고...
저한테는 한방이라는 것은 없네요...이것저것 다 살펴보게 만드는 이 수렁의 실력은 언제쯤 업그레이드 되려는지...
하여튼 이제는 준비는 다 되었네요..
|