通过 DLL 调用实现 Lua 脚本编写?

能否通过使用lua52.dll文件编写一个程序来执行lua脚本?

还是我必须创建一个新的C项目并使用所有这些头文件和源文件?

我只想创建一些全局变量和函数,并使它们在应执行的lua脚本中可用。

所以从理论上讲:

LoadDll("lua52.dll")
StartLua()
AddFunctionToLua("MyFunction1")
AddFunctionToLua("MyFunction2")
AddVariableToLua("MyVariable1")
...
ExecuteLuaScript("C:\myScript.lua")
CloseLua()
点赞
用户501459
用户501459
LoadDll("lua52.dll")

StartLua()

AddFunctionToLua("MyFunction1")

AddFunctionToLua("MyFunction2")
AddVariableToLua("MyVariable1")

...

ExecuteLuaScript("C:\\myScript.lua")

CloseLua()

上面的语言是写在哪个应用程序中的?如果这是 Lua 脚本,那么 "AddFunctionToLua" 只是 function name() end。如果这是 C,那么你已经有了 C 项目,不需要 "创建新的 C 项目"。所以你的问题不是很清楚。

2013-10-14 20:05:00
用户68204
用户68204

Lua 的标准命令行解释器就是这样的一种程序。在 Windows 上,它是一个链接到 lua52.dll 的小型可执行文件。它的源代码当然是 Lua 发行版 的一部分。

尽管 lua.c 和 Lua 的 DLL 源代码位于同一文件夹中,但它只引用了 Lua 的公共 API,并且只依赖四个公共头文件和 DLL 本身。

更简单的嵌入 Lua 解释器到 C 程序中的示例如下,派生自 在线可用的 PiL 书中的示例

#include <stdio.h>
#include <string.h>
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>

int main (void) {
    char buff[256];
    int error;
    lua_State *L = luaL_newstate();  /* create state */
    luaL_openlibs(L);                /* open standard libraries */

    while (fgets(buff, sizeof(buff), stdin) != NULL) {
        error = luaL_loadbuffer(L, buff, strlen(buff), "line") ||
                lua_pcall(L, 0, 0, 0);
        if (error) {
            fprintf(stderr, "%s", lua_tostring(L, -1));
            lua_pop(L, 1);  /* pop error message from the stack */
        }
    }

    lua_close(L);
    return 0;
}

在您现有的应用程序中,您需要调用 luaL_newstate() 一次并存储返回的句柄。除了调用 luaL_openlibs() 外,您还可能想定义您的应用程序的一个或多个 Lua 模块来表示可脚本化的 API。当然,在退出之前,您需要在某个时候调用 lua_close(),以便 Lua 有机会清理其对象,特别是处理脚本作者依赖于释放资源的任何对象时。

有了这个,通常您会提供一种方法来使用 luaL_loadbuffer() 或其他几个建立在 lua_load() 之上的函数加载用户提供的脚本片段。加载脚本会将其编译并将匿名函数留在堆栈顶部,当调用时,将执行脚本中的所有顶级语句。

有关此问题的更多讨论,请参阅 Programming in Lua 的相关章节(旧版本在线)。

2013-10-14 20:49:39