В чем разница между модулями lua 5.0.2 и 5.3.5? - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь написать код на C ++ для lua. Сначала я использовал последнюю версию 5.3.5 и смог зарегистрировать некоторые новые функции. Но последняя программа, для которой я хочу написать код, использует 5.0.2. После того, как я скомпилировал старый исходный код и собрал dll с lua 5.0.2, 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;
}

1 Ответ

0 голосов
/ 28 января 2020

Если вы посмотрите на документацию (прокрутите вниз до require, тогда у него еще не было привязок для функций ...), вы увидите, что require в 5.0 действительно только загружает Lua файлы. Если у вас нет доступа к loadlib, вам, вероятно, не повезло.

(Существует даже большая вероятность, что они скомпилировали Lua таким образом, чтобы динамически связывать библиотеки c вообще не поддерживается - поэтому, даже если вы знали об ошибке, которую можно использовать для поиска, pu sh & (повторно) добавьте указатель loadlib как функцию Lua значение, которого может быть недостаточно…)

...