2010-05-20 1 views
2

У меня есть приложение C++, которое взаимодействует с lua-файлами. У меня есть файл lua, который извлекает zip-файлы, которые работают, когда я запускаю его с помощью SciTe или командной строки Lua. Но когда я пытаюсь запустить его из приложения C++, он, похоже, не работает.Почему luazip извлекает файлы при вызове из приложения C++?

require "zip" 

function ExtractZipFiles(zipFilename, destinationPath) 
    zipFile, err = zip.open(zipFilename) 

    -- iterate through each file insize the zip file 
    for file in zipFile:files() do 
     currentFile, err = zipFile:open(file.filename) 
     currentFileContents = currentFile:read("*a") -- read entire contents of current file 
     currentFile:close() 
     hBinaryOutput = io.open(destinationPath .. file.filename, "wb") 

     -- write current file inside zip to a file outside zip 
     if(hBinaryOutput)then 
      hBinaryOutput:write(currentFileContents) 
      hBinaryOutput:close() 
     end 
    end 

    zipFile:close() 
end 

-- Unit Test 
ExtractZipFiles("SZProcessTests.zip", "Infections\\") 

Если я Lua установлен на компьютере и дважды щелкните на файле Lua он работает и файлы будут извлечены, как и ожидалось. Но, это не работает, если я пытаюсь запустить файл Lua от C++, как это:

void CSZTestClientMessagesDlg::OnBtnExecute() 
{ 
    L = lua_open(); 
    luaL_openlibs(L); 
    luaL_dofile(L, "ExtractZipFiles.lua"); 
    lua_close(L); 

    return; 
} 
+0

Какие ошибки вы получаете? –

ответ

4

Прежде всего, проверьте наличие ошибок:

if (luaL_dofile(L, "ExtractZipFiles.lua")) 
{ 
    std::cerr << "Lua error : " << lua_tostring(L, -1) << std::endl; 
} 

Кроме того, я думаю, что Lua не может найти zip-модуль - проверьте настройки путей пакета, прочитайте о требовании в Lua manual.

В общем, вам необходимо проверить, где находится модуль zip (zip.lua?) И убедиться, что он доступен во время выполнения (вы можете вручную загрузить его, например, если все остальное не работает).

+0

Отличный ответ, это было очень полезно. –

Смежные вопросы