2013-07-10 5 views
4

에서 전역 변수를 변경/추가 : 나는 스크립트를로드 C에서루아 나는 작은 루아 스크립트가 C

function g() 
    print(AUp); 
end 

는, 이름 AUP와 변수를 추가하고 몇 백 번 실행 할 수 있습니다.

for(i=0; i<2000; i++) 
{ 
    num= i; 
    lua_pushnumber(L, i); 
    lua_setglobal(L, "AUp"); 

    lua_getglobal(L, "g"); 
    if (lua_call(L, 0, 0) != 0) 
     printf("%s", lua_tostring(L, -1)); 
} 

인쇄물 출력은 항상 0입니다. (i + 1)을 넣으면 출력은 항상 1입니다. AUp의 값을 변경할 수 없습니다. lua_pushnumner 및 lua_setglobal에 대한 첫 번째 호출과 마찬가지로 값은 동일하게 유지됩니다.

무엇이 잘못 되었나요? 함수를 몇 번이나 호출해야하지만 AUp 값을 변경할 수 있으므로 lua_call을 호출하기 전에 업데이트해야합니다.

+0

즉시 푸시 된 번호를 확인하는 경우 해당 번호를 다시 받으시겠습니까? 예. 'assert (lua_tonumber (L, -1) == i);'? 'AUp'를 설정 한 후 검사하는 것은 어떨까요? 예. 'lua_getglobal (L, "AUp"); assert (lua_tonumber (L, -1) == i); ' – greatwolf

답변

0

잘 모르겠지만 시도 : 1. 루아 스크립트에서 AUp 초기 값 정의. 2. C 루프 중 스택 값 정리. ?

편집 : - void lua_call (lua_State *L, int nargs, int nresults); (대신 lua_pcall() 사용) manual 따라 Btw는 루아 5.1.5 와 잘 그 두 점을 잊지 :)

for(i = 0; i<200; i++) 
    { 
      lua_pushnumber(l, i); 
      lua_setglobal(l, "foo"); 

      lua_getglobal(l, "test_f"); 
      if (lua_pcall(l, 0, 0, 0) != 0) 
      { 
        printf("%s", lua_tostring(l, -1)); 
      } 
    } 

function test_f() 
    print(foo) 
end 

작품. 루아 5.1.5 헤더로 코드를 컴파일 할 수 없다.

+0

1. 아니오, AUp가 스크립트 안에 있어야하기 때문에 2. 어떻게해야합니까? 루프의 끝에서 lua_rawgeti 예외로 연결 –

+0

어떤 루아 버전을 사용하고 있습니까? 제 경우에는 귀하의 코드 스 니펫이 전혀 컴파일되지 않습니다. lua_pcall()을 사용하면 잘 작동합니다. 또한 코드 스 니펫을 추가했습니다. – Kamiccolo

+0

4.1을 사용합니다. 그것은 pcall을 가지고 있지 않습니다. 좋은 지적. 루아 5는 크고, 나는 PC와 ARM9에서 같은 버전을 사용한다. 그래서 ver 4를 사용하기로 결정했습니다. –