2011-12-19 5 views
3

C에서 사용자 정의 루아 함수를 호출하려고합니다. 이것에 대한 논의를 보았는데 그 해결책은 분명해 보입니다. luaL_ref() 함수의 인덱스를 잡고 나중에 사용하기 위해 반환 된 인덱스를 저장해야합니다.C에서 루아 호출하기

제 경우에는 luaL_ref를 사용하여 값을 저장했으며, C 코드가 luaL_ref로 저장된 Lua 함수를 호출해야하는 시점에 있습니다. 이를 위해 다음과 같이 lua_rawgeti를 사용하고 있습니다.

lua_rawgeti(l, LUA_REGISTRYINDEX, fIndex); 

이로 인해 lua_rawgeti에서 충돌이 발생합니다.

내가 사용하는 fIndex는 luaL_ref에서받은 값이므로 여기에서 무슨 일이 일어나고 있는지 잘 모르겠습니다.

편집 :

다음과 같이 내가 루아 스크립트를 실행 해요 :

static int save(lua_State *L) 
{ 
    int cIdx = myCIndex = luaL_ref(L, LUA_REGISTRYINDEX); 
    int eIdx = luaL_ref(L, LUA_REGISTRYINDEX); 
: 나는 내 자신의 루아 라이브러리 'MYLIB'을 정의한

function errorFunc() 
    print("Error") 
end 

function savedFunc() 
    print("Saved") 
end 

mylib.save(savedFunc, errorFunc) 

C 함수로,

필자는 Lua 스크립트에서 매개 변수로 설정된 함수 중 하나를 호출하고자하는 외부 이벤트를 수신 할 때까지 cIdx 및 eIdx를 저장합니다. 여기서, (같은 lua_State의 *를 사용하여, 동일한 스레드에서) 내가 전화 : 충돌을 일으키는

lua_rawgeti(L, LUA_REGISTRYINDEX, myCIndex); 

합니다.

+1

이 질문에 답하기 위해 우리는 호출하려고하는 "사용자 정의 루아 함수"를 어디에서 구해야하는지, 그리고 이것을 레지스트리에 저장하는 방법을 알아야합니다. –

+0

[ac 함수에서 루아 함수를 콜백하는 방법] 가능한 복제본 (http://stackoverflow.com/questions/2688040/how-to-callback-a-lua-function-from-ac-function) – finnw

+0

문제는 내가 lua_close (L)를 호출 한 후 lua_rawgeti를 호출하고 있던 지점이 실행되고 있다는 것이 었습니다. – jimt

답변

0

@Schollii가 언급했듯이, 나는 lua_close (L)을 수행 한 후이 호출을하고있었습니다.

0

첫 번째 제안은 C에 함수를 저장하지 않고 작업하게하는 것입니다. 루아의 전역에 함수를 할당하고, C에서 루아 상태 (L)를 사용하여 전역을 가져오고, args를 누르고, 함수를 호출하고, 결과를 사용합니다. 일단 작동하면 기본 기능을 사용하고 기능이 제대로 작동하는지 알게되며, 레지스트리에서 기능을 사용하는 방식을 변경할 수 있습니다. 행운을 빕니다!

+0

주석을 읽으면 상태를 사용하기 전에 jult가'lua_close'라고 표시됩니다. – BMitch