2012-05-20 2 views
0

나는 이것을 풀려고 지난 6 시간을 보냈습니다! 그리고 난 어디서든 얻을 coulnt :의C++에서 .Lua 스크립트로 루아 표를 전달합니다.

나는 ++은 C에서 파일을 루아 테이블을 생성 할 수 후 다음 루아 기능이있는 루아 스크립트 파일에 저를 전달하려는

:

function MTable (t) 
local n=#t 
    for i=1,n do 
     print(t[i]) 
    end 
end 

를 내가 동적으로 2 개의 문자열이있는 1 차원 배열을 만들었습니다.

lua_newtable(L); 
lua_pushstring(L,"10.10.1.1"); 
lua_pushstring(L,"10.10.1.2"); 
lua_rawseti(L,-3,2); 
lua_rawseti(L,-2,1); 

이제 스택 맨 위에 테이블이 있습니다. 나는 이것을 다음과 같이 작성하여 확인했습니다 : if (lua_istable (L, lua_gettop (L)))`이 1을 반환했습니다. 이는 테이블임을 의미합니다.

는 내가 이런 짓을 : 이 스크립트를 실행하지 못했습니다 : 그래서 그 오류가있어

lua_getglobal(L, "MTable"); // push the lua function onto the stack uint32_t result = lua_pcall(L, 1, 0, 0); //argument 1 is for the table if (result) { printf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1)); exit(1); } 

가 친절하게 파일이 여러 가지 다른 기능을 가지고 있습니다 테이블 값을 호출하는 시도를하는 나는 C++에서 성공적으로 호출하고있다.

누가이 오류를 해결할 수 있도록 도와주세요. 이게 LUA의 버그 일 수 있습니까? Cz 나는 아주 정확하게 단계를 따라 갔다. .. 나는 추측한다!

+0

이것은 Lua 메일 링리스트에서 물어 보았습니다. – lhf

답변

3

함수는 스택에서 args 앞에 이 먼저이되어야합니다.

다음 중 하나를 수행 할 수 있습니다 :

  1. 푸시 테이블을 생성하기 전에 스택에 호출하는 기능, 예를 들면 :

    lua_getglobal(L, "MTable"); 
    ...generate table on stack... 
    int result = lua_pcall(L, 1, 0, 0); 
    
  2. 는 지금 순서대로 수행 한 후 바로 교체 pcall하기 전에 arg와 함수 :

    ...generate table on stack... 
    lua_getglobal(L, "MTable"); 
    lua_insert (L, -2); // swap table and function into correct order for pcall 
    int result = lua_pcall(L, 1, 0, 0); 
    
+0

감사합니다. 그것은 마술 같이 일했다! 질문이 하나 더 있습니다. C가 루아의 테이블을 어떻게 fect합니까? 루아 스크립트를 편집하여 t를 반환했습니다. 그래서이 시점까지 lua는 스택 위로 t를 밀었습니다. C가 어떻게 받아 들일 수 있을까요? 나는이 질문에 달려 드는 또 하나의 실을 읽었지만 해결책에 대한 한마디를 이해할 수 없었다. 내가 아는 전부는 루아 상태 매개 변수를 취하는 C 함수를 작성해야하고 거기에서 계속하는 방법을 알지 못한다는 것입니다. 어떻게 알 수 있습니까? – PeacefulSoul

관련 문제