2014-10-29 15 views
6

Tôi đang cố chuyển bảng Lua sang chương trình C của mình nhưng tôi không biết cách thực hiện.Đọc bảng Lua từ C

đang

My Lua:

local stages = {} 
stages[1] = stage1 
stages[2] = stage2 
stages[3] = stage3 

lstage.buildpollingtable(stages) 

mã C của tôi:

static int lstage_build_polling_table (lua_State * L) {  
    luaL_checktype(L, 1, LUA_TTABLE); 

    lua_getfield(L, 1, "stage1"); 
    lua_getfield(L, 1, "stage2"); 
    lua_getfield(L, 1, "stage3"); 

    stage_t s1 = lstage_tostage(L, -3); 
    stage_t s2 = lstage_tostage(L, -2); 
    stage_t s3 = lstage_tostage(L, -1); 

    printf("%d\n",s1->priority); 
    printf("%d\n",s2->priority); 
    printf("%d\n",s3->priority); 

    return 1; 
} 

gì làm tôi phải làm gì để chạy trên tất cả các yếu tố? Mã này tạo ra lỗi như sau:

bad argument #-3 to 'buildpollingtable' (lstage-Stage * expected, got table)

Bất cứ ai có thể giải thích tôi đang làm gì sai?

Trả lời

4

Bảng của bạn không có các trường có tên stage1, v.v., chỉ các trường 1, 2, 3. Vì vậy hãy thử

lua_rawgeti(L,1,1); 
lua_rawgeti(L,1,2); 
lua_rawgeti(L,1,3); 

thay vì

lua_getfield(L, 1, "stage1"); 
lua_getfield(L, 1, "stage2"); 
lua_getfield(L, 1, "stage3"); 
+0

Tuy nhiên, thông báo lỗi nên được '..., có nil'. Có lẽ sử dụng các số âm là nhầm lẫn 'lstage_tostage'. – lhf

+0

Nó trả về lỗi này: "cảnh báo: đối số đi qua 3 của 'lua_getfield' làm cho con trỏ từ số nguyên mà không có dàn diễn viên [được bật theo mặc định]" =/... cảm ơn bạn đã giúp đỡ @lhf – Crasher

+1

@Crasher, bạn đã sử dụng mã 'lua_rawgeti'? – lhf