【问题标题】:How to call luasql script from .NET如何从 .NET 调用 luasql 脚本
【发布时间】:2019-06-17 21:20:45
【问题描述】:

我将 ZeroBrane IDE 用于 lua 脚本,将 Visual Studio 2015 用于 C# 我可以用普通变量从 C# 调用 lua 脚本,但我不能用 sql-odbc 运行脚本,它只能在 zeroBrane 中工作,但从 c# 我不能。

这里是 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':找不到指定的模块

【问题讨论】:

  • 您是否已将 dll 复制到所需位置?
  • 所有 .dll 文件已经在调试目录的 luasql 文件夹中。
  • 我在使用nlua 时遇到的一个问题是require("luasql.odbc") 只会在我的lua 文件夹之外查看,所以如果我有..\lua\lua_odbc.lua..\lua\luasql\odbc.dll 它只会寻找@ 987654328@没找到
  • 它只适用于lua51,而NLua使用lua52,如何解决这个问题??

标签: c# lua zerobrane luasql


【解决方案1】:

我怀疑 odbc.dll 的依赖项之一丢失或未加载(可能是 Lua DLL 或它链接的其他库)。您可以使用dependency walker 获取依赖项列表,甚至可以在“配置文件”模式下运行您的应用程序,这将显示所有加载的 DLL 以及任何失败的加载及其相关错误。

【讨论】:

  • odbc.dll 仅适用于 lua51.dll,不适用于 lua53 或 lua52,NLua 仅使用 lua52.dll !!!???
  • 这是意料之中的,因为每个 dll 仅针对特定的 Lua 解释器进行编译。您需要针对 lua52 编译 odbc.dll 以使其与 NLua 一起使用。您可以尝试twoface 看看它是否适用于您的项目(“twoface 是一个使用 5.2 ABI 并呈现 5.1 样式 ABI 的 DLL,从而允许 5.2 程序加载大多数 5.1 C 库而无需任何重新编译。 ")
猜你喜欢
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 2023-03-17
  • 2014-08-03
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多