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

  • 本文关键字:区别 模块 lua c++ dll lua
  • 更新时间 :
  • 英文 :


我尝试为 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;
}

如果您查看文档(向下滚动到require,当时它还没有每个函数的锚点......(,您会发现 5.0 中的require确实只加载 Lua 文件。 如果您无法访问loadlib,您可能不走运。

(甚至很有可能他们编译Lua的方式根本不支持库的动态链接 - 所以即使你知道一个错误可以用来查找,推送和(重新(添加loadlib的指针作为Lua函数值,这可能还不够......

最新更新