我尝试为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;
}
[如果您查看at the documentation(向下滚动到require
,那么那时还没有按功能定位的锚…),您会看到5.0中的require
实际上仅加载Lua文件。如果您无权访问loadlib
,则可能是您不走运。
((他们很可能以不支持动态链接库的方式编译Lua 完全 –因此,即使您知道可以用来查找,推送和(重新)将loadlib
的指针添加为Lua函数值,可能还不够……)