【发布时间】:2020-05-05 10:05:36
【问题描述】:
我尝试为 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()只理解实际lua代码的文件,共享库使用了不同的方法。 -
我没用过Lua 5.0,所以我可能错了,但是试试
loadlib([[C:\path\to\remaster_IO.dll]], "luaopen_remaster_IO")()而不是require("remaster_IO") -
loadlib 对于解释器来说工作得很好,但我担心我需要这个的游戏有 lua 5.0.2 的简化版本。有没有机会用 require 或 dofile 做到这一点?