【问题标题】:Lua 5.4 source inclusion Not quite right in c++Builder 10.1Lua 5.4 源代码包含在 c++Builder 10.1 中不太正确
【发布时间】:2020-11-06 01:08:21
【问题描述】:

我已经下载了最新版本的 Lua,并将源代码包含在 Embarcadero 的 c++builder 项目中。一切都很顺利。完美编译。

但是当我运行我的脚本时,它就会停止正常工作。

这个脚本没问题

-- Script
Tp = tonumber( Temp )
Sp = tonumber( Setpoint )
Clr = "0xFF00FF00"
Db = 0.5
Hi = (Sp+Db)+1
Lo = (Sp-Db)-1
f = Hi
--

此脚本失败

-- Script
Tp = tonumber( Temp )
Sp = tonumber( Setpoint )
Clr = "0xFF00FF00"
Db = 0.5
Hi = (Sp+Db)+1
Lo = (Sp-Db)-1
f = math.floor( Hi )
--

如果我尝试使用string.format,它也会失败,所以看起来库没有正确加载。

我使用luaL_openlibs() 加载库。

我得出的结论是,必须有一个我需要使用的编译器指令。但我找不到任何有影响的东西。

如果有人有任何关于将源代码构建到自己的应用程序中的信息,我很想知道。

我这样做的主要原因是为了速度。

我的应用程序是一个针对传入数据运行脚本的数据服务器,我希望有数百个数据连接,包括输入和输出。

【问题讨论】:

  • 请添加描述脚本如何失败的错误 - 以确保这是 math.floorstring.format 缺席的问题。请添加初始化 Lua 状态和加载库的代码部分。乍一看,似乎只加载了基本模块,但很难说没有确切的错误和代码。
  • 我尝试读取错误,但它返回了我加载的脚本的文件名。只有来自 lua_pcall 的返回值表明存在问题。我会尽快拿到其他物品并发布
  • if (lua_pcall(L,2,0,0)!=LUA_OK) fprintf(stderr, "%s\n", lua_tostring(L,-1)); 通常足以收到消息。
  • 现在是这样的时候,我希望互联网可以伸出手来扇我一巴掌。在复制要粘贴到此处的代码时,我注意到我有 2 个加载库的位置。如果有任何可用的脚本,则在开始时进行一次,然后在有人添加第一个脚本时进行第二次。我已经修复了第二个,但不是第一个。不用说它现在运行良好。是时候增加数据了。谢谢你。如果你不问,我就不会注意到(反正还没有)。
  • 请添加您的解决方案作为答案

标签: windows lua scripting c++builder


【解决方案1】:

答案是打电话

lua_openlibs( state );

不是这段代码

static const luaL_reg lualibs[] = 
{
  {"base", luaopen_base},
  {"table", luaopen_table},
  {"io", luaopen_io},
  {"string", luaopen_string},
  {"math", luaopen_math},
  {"debug", luaopen_debug},
  {"loadlib", luaopen_loadlib}, 
  /* add your libraries here */
  {NULL, NULL}
};

static void openstdlibs( lua_State *l ) 
{
  const luaL_reg *lib = lualibs;
  for (; lib->func; lib++) 
  {
    lib->func(l);  /* open library */
    lua_settop(l, 0);  /* discard any results */
  }
}

我只能假设 openlibs 缺少一些路径信息。 很抱歉格式设置,无法让它看起来正确

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2021-05-10
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多