2011-10-25 45 views
3

不會加載腳本你好,我試圖讓這個代碼工作lual_dofile();與C++和Lua

extern "C" 
{ 
#include <lua.h> 
#include "lualib.h" 
#include "lauxlib.h" 
} 

#include "glew.h" 
#define GLEW_STATIC 
#include "SDL/SDL.h" 
#include "SDL/SDL_image.h" 
#include <stdlib.h> 
#include <iostream> 
#include <fstream> 




//////////////////////// 
//////////////////////// 
test.h 
void Test(void) 

{ 
    int status; 

**//The Lua Interpreter** 
lua_State *L = lua_open(); 


**//Open Lua Libarys** 
luaL_openlibs(L); 



**//Run Lua Script** 
status = luaL_loadfile(L,"Test.lua"); 

printf("actually getting to this point!"); 
getchar(); 
//Close Lua 
lua_close(L); 



} 

這款名爲test.lua 這是我的盧阿文件

print"Whats your name?" 

function sleep(n) 
end 

這不工作:(

lual_dofile(L, 「Test.lua」);

孔程序編譯但隨後不執行腳本或顯示任何v運行 的lua腳本的反饋意見有沒有人遇到過這個問題?並有任何知識爲什麼?**

+2

你是腳本名爲'test.lua'還是'Test.lua'?此外,正確的功能是'luaL_dofile',而不是'lual_dofile'。最後,確保處理返回值。 – lhf

+2

「這不起作用:(」你是​​什麼意思,它不起作用?_How_它不工作嗎? –

+0

這裏是一些信息,是有用的Lua 5.2使用Lua 5.2而不是老的呼叫與C++程序http://www.troubleshooters.com/codecorn/lua/lua_c_calls_lua.htm –

回答

7

你似乎不瞭解一些事情。

luaL_loadfile從文件加載腳本,編譯它,但它確實運行它而不是運行它。它只是把它推到Lua棧上,這樣你就可以用你認爲合適的任何參數運行它。

luaL_dofile從文件加載腳本,編譯它,運行它,從而彈出腳本從堆棧。

如果出現錯誤,luaL_loadfile將返回錯誤代碼,說明錯誤是什麼類型。如果出現錯誤,它還會將錯誤消息壓入Lua堆棧。如果沒有錯誤發生,則返回0.

同樣,如果發生錯誤,luaL_dofile將返回1,並且錯誤消息將在Lua堆棧上。

您應該始終檢查這些函數的返回值,以查看是否發生錯誤並進行相應的處理。

+0

我如何檢查返回值我通常只是做在if語句在大多數情況下在C++ – NoobScratcher

+0

@NoobScratcher:你需要我告訴你如何檢查一個函數的返回值嗎?你將它存儲在一個變量中,並根據可能的返回值對其進行測試,或者將它粘貼在一個'if'語句中,否則你需要這樣做Lua API函數只是C函數。他們不是魔術師,他們像C一樣工作。 –

+0

這是你怎麼做到的? – NoobScratcher