lua 5.0.2模块和5.3.5有什么区别?

问题描述 投票:-1回答:1

我尝试为lua编写一些c ++代码。首先,我使用了最新版本5.3.5,并能够注册一些新功能。但是我要编写代码的最终程序使用5.0.2。在我编译了旧的源代码并使用lua 5.0.2构建了dll之后,require无法读取文件

Lua 5.0.2  Copyright (C) 1994-2004 Tecgraf, PUC-Rio
> require("remaster_IO.dll")
stdin:1: error loading package `remaster_IO.dll' (remaster_IO.dll:1: `=' expected near `É')
stack traceback:
        [C]: in function `require'
        stdin:1: in main chunk
        [C]: ?

这是dll代码:

extern "C" {
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>

    __declspec(dllexport) int luaopen_remaster_IO(lua_State* L);

}

#define lua_register(L,n,f) \
        (lua_pushstring(L, n), \
        lua_pushcfunction(L, f), \
        lua_settable(L, LUA_GLOBALSINDEX))

#include <iostream>
#include <Windows.h>

int rema_add1(lua_State* L) {
    double d = luaL_checknumber(L, 1); // get item 1
    lua_pushnumber(L, d + 1);
    return 1; // number of items returned
}

int luaopen_remaster_IO(lua_State* L) {
    Beep(200, 200);
    std::cout << "Hello World!!!" << std::endl;

    lua_register(L, "average", rema_add1);

    return 1;
}
c++ dll lua
1个回答
0
投票

[如果您查看at the documentation(向下滚动到require,那么那时还没有按功能定位的锚…),您会看到5.0中的require实际上仅加载Lua文件。如果您无权访问loadlib,则可能是您不走运。

((他们很可能以不支持动态链接库的方式编译Lua 完全 –因此,即使您知道可以用来查找,推送和(重新)将loadlib的指针添加为Lua函数值,可能还不够……)

© www.soinside.com 2019 - 2024. All rights reserved.