Выгрузка библиотек

Страницы: 1
RSS
Выгрузка библиотек
 
Здравствуйте.

Как выгрузить библиотеку при завершении скрипта?

Вот пример




function main()

assert (package.loadlib(getScriptPath() .. "\\sqlite3.dll", "luaopen_luasql_sqlite3")) ()
env = luasql.sqlite3()

local db = env:connect('db.sqlite')

db:execute[[
 CRE ATE   TABLE generic(
   key varchar(50),
   value varchar(150)
 )
]]

db:execute[[
 INS ERT INTO generic VALUES('11111', '2222')
]]
db:execute[[
 INS ERT IN TO generic VALUES('33333', '4444')
]]

local results = db:execute[[
 SEL ECT * FR OM generic
]]

local key,value = results:fetch()
while key do
 message(key ..': '.. val ue)
 key,value = results:fetch()
end

results:close()
db:close()
env:close()

end

не выгружается.

перенос текста в поток терминала эффекта тоже нее дает.


спасибо
 
Перезвоните пожалуйста по номеру     8(962) 685-78-28   Иван
 
Цитата
Иван написал:
Перезвоните пожалуйста по номеру     8(962) 685-78-28   Иван
эммммм.. .   Это мне?  
 
Цитата
s_mike@rambler.ru написал:
Здравствуйте.Как выгрузить библиотеку при завершении скрипта?
Добрый день.
Насколько мне известно, в Lua нет функционала принудительной выгрузки модулей, но возможность есть, вот пример (sqlite3.dll под рукой не было, проверил на odbc.dll):
Код
function main()
  
  assert(package.loadlib(getScriptPath() .. "\\lib\\luasql\\odbc.dll", "luaopen_luasql_odbc")) ()
  env = luasql.odbc()

  local db = env:connect("LuaTest","login","pass")

  db:close()
  env:close()
  
  
  print_loaded_modules()
  
  unrequire('luasql')
  message('**********')
  print_loaded_modules()
end

function print_loaded_modules()
  for k,v in pairs(package.loaded) do
    message(string.format("%s=%s", k, tostring(v)))
  end
end

function unrequire(m)
  package.loaded[m] = nil
  _G[m] = nil
end
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
И еще один момент, при завершении скрипта модули автоматически выгружаются.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Отлично, рецепт помог, спасибо.

Как понимаю, память будет освобождена..
 
Цитата
s_mike@rambler.ru написал:
Отлично, рецепт помог, спасибо.

Как понимаю, память будет освобождена..
т.к. ссылка на модуль уничтожается, в этом случае сборщик мусора VM lua в теории должен подчистить память при очередном забеге.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
И еще один вопрос по теме.

в случае индикатора этот способ будет работать? Eстройство терминала в этом вопросе для меня туманная загадка...

при старте loadlib() и connect() в КАЖДОМ экземпляре индикатора и в ondestroy() вычищение его из _G

проблемы ожидаются?
 
Цитата
s_mike@rambler.ru написал:
И еще один вопрос по теме.в случае индикатора этот способ будет работать? Eстройство терминала в этом вопросе для меня туманная загадка...при старте loadlib() и connect() в КАЖДОМ экземпляре индикатора и в ondestroy() вычищение его из _Gпроблемы ожидаются?
Добрый день.
Проблем не должно быть, ведь каждый Lua скрипт, и каждый Lua индикатор крутятся в своем собственном экземпляре виртуальной машине Lua, соответственно в каждой из этой виртуальной машине совой экземпляр таблицы _G, package.loaded и т.д.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
Страницы: 1
Читают тему (гостей: 1)
Наверх