Почему C не может видеть мой файл сценария lua?

#c #lua

#c #lua

Вопрос:

У меня простая проблема с интеграцией Lua с c . У меня есть мой проект в Visual Studio: http://i.stack.imgur.com/nNw6H.png

и я запускаю свою функцию lua_init () :

 bool lua_init(std::string amp;luaScriptName){
// Create the Lua state. Explanation from Lua 5.1 Ref. Manual:

globalL = luaL_newstate(); // 5.1 OK - Lua 5.0 or lower will probably require different commands

if( globalL == NULL )
    return false;

    // Loads all Lua standard libraries
luaL_openlibs(globalL);  // 5.1 OK - Lua 5.0 or lower will require different commands

// This lot below could be replaced with luaL_dofile, but that just does: luaL_loadfile(..) || lua_pcall(..), which gives no reporting of error messages etc.
int initError = luaL_loadfile(globalL,luaScriptName.c_str());
switch( initError )
{
    case 0:
        // The file loaded okay, so call it as a protected function - to stop fatal errors from exiting the program
        lua_pcall(globalL,0,0,0);
        break;
    case LUA_ERRFILE:
        std::cerr<<"Cannot find / open lua script file: "<<luaScriptName<<std::endl<<"Skipping Lua init."<<std::endl;
        break;
    case LUA_ERRSYNTAX:
        std::cerr<<"Syntax error during pre-compilation of script file: " <<luaScriptName<<std::endl<<"Skipping Lua init."<<std::endl;
        break;
    case LUA_ERRMEM:
        // Treating this as fatal, since it means other Lua calls are unlikely to work either
        std::cerr<<"Fatal memory allocation error during processing of script file: " <<luaScriptName<<std::endl;
        return false;
}
return true;
  

}

но я не знаю, что получаю сообщение об ошибке «Не удается найти / открыть файл сценария lua:»

должен ли я каким-то образом указать мой script.lua на Visual Studio? файл расположен в каталоге проекта.

Ответ №1:

Ваш код будет выполняться там, где находится двоичный файл, или в целевом каталоге в режиме отладки. Поэтому убедитесь, что ваш файл lua доступен для вашего двоичного файла при его выполнении. Если он находится в ваших исходных файлах, то, конечно, он недоступен.

Комментарии:

1. Спасибо за ответ. Я изменил рабочий каталог Visual Studio и поместил туда свой script.lua. Я не получаю сообщение об ошибке о том, что файл не найден, но скрипт все равно не выполняется — я не вижу HelloWorld в консоли.

2. Итак, 1. мой ответ был правильным, тогда проверьте его! 2. Я не знаю, что должен делать ваш скрипт! 3. если предполагается, что ваш скрипт печатает hello world, убедитесь, что выводом вашей виртуальной машины lua является консоль. Я действительно сомневаюсь, что ваша виртуальная машина выводит стандартный вывод, но вам придется проверить это самостоятельно. В любом случае, если у вас нет никакой ошибки, значит, скрипт загружен (запущен ли он? Я не помню, достаточно ли просто загрузить его) так что посмотрите в коде lua.

3. Хорошо, итак, во-первых, мой скрипт просто: print("hello world"); во-вторых: я создал новый проект в VS (не с помощью ogreAppWizard, а обычный проект на c ) и скопировал в него те же файлы, и теперь все работает просто отлично. Я думаю, что проблема более специфична для ogre — как вы что-то сказали о lua vm — как я могу это проверить?

4. Проверьте документ lua. Если я правильно помню, есть способы подключить функцию print () к какому-то определенному выводу, но по умолчанию она будет выводить стандартный вывод C, который в вашем случае может быть деактивирован или что-то в этом роде. Просто проверьте, куда он идет в данный момент, переподключите его к своему устройству вывода, и вы заставите его работать. Вы забыли «проверить» мой ответ? 🙂

5. Я попытаюсь заглянуть в документ lua (но, как я недавно посмотрел, это было довольно сложно для меня : ( ). Я нашел этот фрагмент кода для запуска консоли в ogre: ссылка , и я вставил его в свой код, но помимо многих других вещей, я не могу видеть «Привет, мир» скрипта lua, кстати. извините, я не могу «проверить» ваш ответ, потому что у меня слишком мало очков репутации : (