Lua 호출 C 함수:tolua+의 사용

3184 단어 lua
C 와 lua 가 상호작용 을 할 때 스 택 방식 으로 완성 하고 lua 가 C 함 수 를 호출 할 때 똑 같이 스 택 을 통 해 스 택 을 나 와 데이터 상호작용 을 완성 해 야 합 니 다.tolua++를 사용 하여 이 절 차 를 간소화 하면 lua 가 C 를 편리 하 게 호출 할 수 있 습 니 다.원 리 는 pkg 파일 을 통 해 C 가 lua 에 노출 된 인 터 페 이 스 를 정의 하 는 것 입 니 다.물론 tolua++도 C++를 지원 하지만 간단 한 고려 에서 저 는 C 함수 인터페이스 만 사용 합 니 다.
tolua++홈 페이지:http://www.codenix.com/~tolua/
1.tolua++를 설치 하고 제 가 사용 하 는 버 전 은 1.0.93 입 니 다.INSTALL 문서 설명 에 따라 컴 파일 하고 설치 합 니 다.tolua+를 컴 파일 하려 면 먼저 scons 를 설치 하고 주 소 를 다운로드 해 야 합 니 다.http://www.scons.org/download.phprpm 패키지 로 설치,rpm-ivh scons-2.1.0-1noarch.rpm 으로 scons 를 설치 한 후,tolua++를 tolua+디 렉 터 리 에서 scons 를 실행 하여 설 치 를 완료 합 니 다.
2.톨 루 아+톨 루 아+의 src 폴 더 에 test 디 렉 터 리 가 있 는 방법 을 사용 하 는 방법 을 보 여 줍 니 다.lua 를 사용 하여 C/C++를 호출 하 는 방법 을 보 여 줍 니 다.그러나 가장 간단 한 tarray 테스트,assert 는 실 패 했 습 니 다.
test.pkg 파일 을 정의 합 니 다.tolua+는 이 파일 을 사용 하여 lua 호출 C 함수 의 실현 파일 을 생 성 합 니 다.pkg 파일 형식 은.h 파일 과 비슷 합 니 다.일반적인 상황 에서 C 함수 만 설명 하고 test.h 파일 을 포함 하 며 test.c 는 구체 적 인 업 무 를 수행 하 는 파일 입 니 다.
interface.pkg 파일
    $#include "interface_c.h"
    
    int add(int x, int y);
    int sub(int x, int y);
    
    module log
    {
        void write_log(int level, char* msg);
    }

이 pkg 는 add,sub,log 모듈 의 write 를 정의 합 니 다.log 인터페이스.
    interface_c.h
    
    int add(int x, int y);
    int sub(int x, int y);
    //log   
    void write_log(int level, char* msg);

interface_c.cpp 구현:
    int add(int x, int y)
    {
        return x + y;
    }
    int sub(int x, int y)
    {
        return x - y;
    }
    
    void write_log(int level, char* msg)
    {
        log(level, msg);
    }

이 몇 개의 파일 이 있 으 면 우 리 는 lua 에서 C 의 함 수 를 호출 할 수 있 습 니 다.그 다음 에는 C 함 수 를 호출 하 는 cpp 파일 을 생 성 해 야 합 니 다.
tolua+-n interface-o interface.cpp interface.pkg 은 interface.cpp 를 생 성 합 니 다.긴 내용 은 상관 하지 않 아 도 됩 니 다.바로 모든 함수 의 검사 매개 변수,스 택 출 스 택 등 작업 입 니 다.
lua 테스트 쓰기:[zrs@local5 ~/lua/test2]$ cat test.lua x = add(1, 2) print(“add result = ” .. x)
y = sub(20, 10) print(“sub result = ” .. y)
log.write_log(1, “test log”)
[zrs@local5 ~/lua/test2]$ ll total 28 -rwxr-xr-x 1 zrs www 218 Feb 28 18:33 interface_c.cpp -rwxr-xr-x 1 zrs www 99 Feb 28 18:26 interface_c.h -rwxr-xr-x 1 zrs www 3167 Feb 28 18:25 interface.cpp -rwxr-xr-x 1 zrs www 141 Feb 28 18:24 interface.pkg -rwxr-xr-x 1 zrs www 319 Feb 28 18:30 main.cpp -rwxr-xr-x 1 zrs www 1161 Feb 28 18:12 Makefile -rw-r–r– 1 zrs www 118 Feb 28 18:33 test.lua
    main.cpp
    extern "C"
    {
        #include "lua.h"
        #include "lualib.h"
        #include "lauxlib.h"
    }
    #include "interface_c.h"
    int tolua_interface_open (lua_State*);
    int main (void)
    {
        lua_State* L = lua_open();
        
        luaopen_base(L);
        tolua_interface_open(L);
        
        int ret = luaL_dofile(L,"test.lua");
        
        lua_close(L);
        return 0;
    }

 
컴 파일:
컴 파일 옵션 은 tolua+-ltoua++5.1 테스트 를 연결 해 야 합 니 다.
[zrs@local5 ~/lua/test2]$ ./simpletest add result = 3 sub result = 10 log level[1]:test log
테스트 통과.

좋은 웹페이지 즐겨찾기