2010-02-27 5 views
7

루아를 C/C++ 애플리케이션에 임베드 할 예정입니다. 먼저 전체 스크립트를 실행하지 않고 C/C++에서 루아 함수를 호출하는 방법이 있습니까?스크립트를 실행하지 않고 루아 함수 호출하기

나는이 일을 시도했다 :

//call lua script from C/C++ program 
luaL_loadfile(L,"hello.lua"); 

//call lua function from C/C++ program 
lua_getglobal(L,"bar"); 
lua_call(L,0,0); 

를하지만 나에게이 제공 :

//call lua script from C/C++ program 
luaL_dofile(L,"hello.lua"); //this executes the script once, which I don't like 

//call lua function from C/C++ program 
lua_getglobal(L,"bar"); 
lua_call(L,0,0); 

:

PANIC: unprotected error in call to Lua API (attempt to call a nil value) 

난 단지 호출 할 수있는 바() 나는이 작업을 수행 할 때 그러나 그것은 나에게 이것을 준다 :

hello 
stackoverflow!! 
012 단순히 그 시점에서, 호출 가능한 덩어리로 파일을 컴파일 단지는 Freenode luaL_loadfile에 #lua에서 논의 된
print("hello"); 

function bar() 
print("stackoverflow!"); 
end 
+1

당신이 ETAN은 당신이 밖으로 추출해야 표시처럼 루아 VM이 그것을보고 얻을 수있는 스크립트를 실행해야하기 때문에' function bar()'를 다른 파일로 옮기고 그 파일을 실행하면됩니다. – greatwolf

답변

13

으로

:

stackoverflow! 

이 내 루아 스크립트입니다 3,516,

나는이 걸려 라 파일 안의 어떤 코드도 실행되지 않았다. (함수 정의를 포함한다.) chunk를 호출 할 bar의 정의를 얻기 위해서 (luaL_dofile은 무엇인가) 호출해야한다.

+0

나는 채팅에서 그 질문을 한 사람이었다. P – Person

+0

나는 너를 알았지 만 어쨌든 어쨌든 참조를 분명하게 만들 것이라고 생각했다. –

1

함수를 호출하려면 스크립트를 실행해야한다는 것을 알았습니다.

0

한 가지 가능한 솔루션/해킹 (및 하시기 바랍니다 내가 이것을 테스트 현재 드릴 수 없습니다 염두에 곰) ...


더미 삽입 "반환;" LUA 코드 맨 위에있는 행. (당신이 준비에서와 같은 luaL_loadstring() 사용하는)

  • 지금은 이제 연결된 문자열
에게 luaL_loadstring()printf_s("return;\r\n%s", [pointer to string holding actual LUA code])
  • 를 사용하는 간단한 문제이어야한다
  • 를 문자열로 파일을로드

    코드는 여전히 실행되지만 실제로 수행 할 작업에 도달하기 전에 차단되어야합니다 (예 : print("hello"); 예에서 인쇄 줄을 찾을 수 없음). 은 아직 모든 함수 프로토 타입 목록을 업데이트해야하므로 이제 lua_get()을 사용하여 함수를 참조 할 수 있어야합니다.


    참고 : 을 모르는 사람들을 위해 "\ 연구 \ n"는 Windows OS에 줄 바꿈을 나타내는 이스케이프 코드이며,이 MUST 그 슬래시 수 ...IE : 본 연구 \ \ N하지/R/N

  • 관련 문제