【问题标题】:Syntax error when loading lua script加载 lua 脚本时出现语法错误
【发布时间】:2016-05-26 03:24:04
【问题描述】:

我试图在我的应用程序中使用 lua,但是在尝试使用 lua_loadBuffer 加载脚本时,我收到一条错误消息。

LuaContext := lua_newstate(@Alloc, nil);
  try
    luaL_openlibs(LuaContext);
    s := 'print("hi")';
    lua_register(LuaContext, 'print', @print_func);  
    if luaL_loadbuffer(LuaContext, PChar(s), Length(s), PChar('sample1')) <> 0 then
    begin
      raise Exception.Create(lua_tostring(LuaContext, -1));  //<- I get the following error message here:  [string "sample1"]:1: syntax error
    end;
    if lua_pcall(LuaContext, 0, 0, 0) <> 0 then
      Exception.Create('');
  except
      Debugln('Error: ' + lua_tostring(LuaContext, -1));
  end;

Afaik lua 代码是有效的,对吧? 只是一个“语法错误”的描述性不是很好,而且我对 lua 没有任何经验,我什至不知道在哪里寻找错误。

【问题讨论】:

  • 试试var s:AnsiString;
  • @EgorSkriptunoff 谢谢,那行得通。你可能想发布一个答案,所以我可以接受。
  • Egor 主要做 cmets;答案有一个长度限制,他通常低于 ;)。随意发布并接受您自己的答案。
  • @PaulKulchenko - 有时我会打破这个传统 :-)

标签: lua pascal freepascal


【解决方案1】:

Lua 不适用于 UTF-16 字符串。
为确保您的数据使用 1 字节代码页进行编码,请使用 AnsiStringPAnsiChar 而不是 String 和 PChar。

【讨论】:

  • Freepascal 默认模式 pchar=pansichar 和 string=ansistring
  • @MarcovandeVoort - 是的,默认情况下。
猜你喜欢
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
相关资源
最近更新 更多