Как вызвать скрипт luasql из .NET

Я использую ZeroBrane IDE для lua-скрипта и Visual Studio 2015 для C#. Я могу вызывать lua-скрипт из C# с обычной переменной, но я не могу запустить скрипт с помощью sql-odbc, он работает только в zeroBrane, но из c# я не могу .

вот код С#

try
{
   Lua lua = new Lua();
   lua.DoFile("DGT_MSID.lua");

   var x = lua.DoString("return GetData()");
   Console.WriteLine(x.First().ToString());
} catch(NLua.Exceptions.LuaScriptException ex)
{
   Console.WriteLine(ex.Message);
}

Скрипт DGT_MSID.lua

function GetData()
  require "luasql.odbc"
  env = assert(luasql.odbc())
  print(env)
  con = assert(env:connect("conan", "sa", "p@ssw0rd"))
  print(con)
  cur = assert (con:execute"use testdb")
  cur = assert (con:execute"SELECT MSISD FROM MSID")
  row = cur:fetch({}, "a")

  while row do
    print(string.format("%s",row.MSISD))
    row = cur:fetch (row, "a")
  end

  cur:close()
  con:close()
  env:close()

  return row.MSISD
end

Вот эта ошибка:

ошибка при загрузке модуля luasql.odbc из файла '...\Debug\luasql\odbc.dll': указанный модуль не найден


person EngBashir    schedule 24.01.2019    source источник
comment
Вы скопировали dll в нужное место?   -  person dontpanic    schedule 24.01.2019
comment
все файлы .dll уже находятся в папке luasql в каталоге отладки.   -  person EngBashir    schedule 24.01.2019
comment
Проблема, с которой я столкнулся при использовании nlua, заключалась в том, что require("luasql.odbc") будет искать только за пределами моей папки lua, поэтому, если у меня есть ..\lua\lua_odbc.lua и ..\lua\luasql\odbc.dll, он будет искать только ..\luasql\odbc.dll и не сможет его найти.   -  person Nifim    schedule 24.01.2019
comment
он работает только с lua51, а NLua использует lua52, как решить эту проблему??   -  person EngBashir    schedule 25.01.2019


Ответы (1)


Я подозреваю, что одна из зависимостей odbc.dll отсутствует или не загружается (это может быть Lua DLL или какая-либо другая библиотека, с которой она связана). Вы можете использовать просмотр зависимостей, чтобы получить список зависимостей и даже запустить приложение в режиме "профиль", который покажет все загруженные библиотеки DLL, а также любые неудачные загрузки и связанные с ними ошибки.

person Paul Kulchenko    schedule 24.01.2019
comment
odbc.dll работает только с lua51.dll, не работает с lua53 или lua52, а NLua использует только lua52.dll !!!??? - person EngBashir; 25.01.2019
comment
Это ожидаемо, так как каждая dll компилируется только для конкретного интерпретатора Lua. Вам нужно скомпилировать odbc.dll с lua52, чтобы он работал с NLua. Вы можете попробовать twoface, чтобы увидеть, работает ли он для вашего проекта (twoface — это DLL, которая использует 5.2 ABI и представляет собой ABI в стиле 5.1, что позволяет программе 5.2 загружать большинство библиотек 5.1 C без необходимости какой-либо перекомпиляции.) - person Paul Kulchenko; 26.01.2019