🧯Lua/C, 루아 라이브러리

C++ 와 Lua 연동하는법

Mawile 2021. 4. 7.
728x90

 

안녕하세요!

이번에 연동하기 바로 시작하겠습니다!

먼저 아래 사이트는 Lua공식 홈페이지입니다!

www.lua.org/

 

The Programming Language Lua

 

www.lua.org

 

그중!~

[download] -> [binaries] -> [Installation에서 Lua for Windows]를 들어가주면 다음과같은

윈도우즈설치용 루아패키지가 나옵니다!

 

github.com/rjpcomputing/luaforwindows.git

 

rjpcomputing/luaforwindows

Lua for Windows is a 'batteries included environment' for the Lua scripting language on Windows. NOTICE: Looking for maintainer. - rjpcomputing/luaforwindows

github.com

 

 

저는 압축을 풀어서 그냥 꺼내쓰기좋은 장소에다가 저장해놓았습니다....ㅎ

 

 

 

그다음은 C++랑 연동하는 방법인데요!

 

각각 라이브러리파일과 헤더파일은 다음경로에 존재합니다.

/files/include/

/files/lib/

그리고 이거를 VisualStudio에서 추가 디렉토리 라이브러리추가랑

추가 포함 디렉터리에 다가 경로를 각각 추가하시면됩니다~~!!!

 


 

이제 Lua스크립트를 C++에서 호출한다음 그대로 실행시켜보겠습니다~!

C++은 vs를 사용했으며 lua는 sublimeText를 사용했습니다

 

[ C++ ]

#include <iostream> //C++ 입출력
#include <conio.h> //_getch()사용

extern "C" { //C언어라고 명시적으로 인클루딩
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}

#pragma comment(lib, "lua51.lib") //외부라이브러리 참조

int adds(lua_State* L) { //두 인자값을 넘겨받아서 더한값을 리턴하는 함수(Lua에서 사용될예정)
	int a = lua_tonumber(L, 1); //첫번째인자값
	int b = lua_tonumber(L, 2); //두번째인자값
	lua_pushnumber(L, a + b + 8); //두값을 더한값에다가 8을 더한값을 스택에 PUSH
	return 1;
}

int main() {
	lua_State* L = luaL_newstate(); //하나의 루아스크립트를 다룰 포인터생성
	luaL_openlibs(L); //라이브러리열기
	lua_register(L, "addsByC", adds); //루아스크립트에 함수추가
	luaL_loadfile(L, "test001.lua"); //스크립트파일불러오기

	int err = lua_pcall(L, 0, 0, 0); //실행
	if (err) { //오류가있을때
		std::cout << "Error: " << lua_tostring(L, -1) << std::endl; // 오류출력
	}

	lua_close(L); //루아종료
	_getch(); //콘솔창 멈추기
}

 

[ Lua ]

i1 = 1
i2 = 3
print(addsByC(i1, i2))

 

 

 

그러면 다음과 같이 정상적으로 콘솔창에서 Lua로 스크립팅했던 내용이 나옵니다!!!!

 

와우~~~~

루아로 스크립팅한 내용이 C++콘솔창으로 나오다니!

 

이것을 이용하여 추후에 Lua에 관한api와 기본문법을 연구하여 C++와 연동하는 더욱 자세하고 다채로운 방법에 관해서 저도 공부할겸 포스팅을 시작할겁니다!

또 Lua는 저도 처음접하는 스크립트언어이기때문에 새로운언어를 공부할생각에 마음이 들뜨기도하고, 언젠가는 이 방법을 이용하여 저만의 게임개발툴이나 엔진을 만들어서 저의 블로그와 유튜브에 배포할 생각입니다. 그럼안녕!!!! 진짜로 재밌네요 근데 흑 ㅠㅠ 이런게 존재했다니 엄청 재밌다 ㅠㅠㅠ

 

 

 


 

728x90

댓글