2015-11-23 7 views
1

Я пытаюсь проверить загрузку C++ модуль DLL в Lua, используя «требуют», ниже C++ файл модуляне удалось загрузить модуль DLL с в Lua

#include <stdio.h> 
#include <iostream> 

extern "C" { 
    #include "lua/lualib.h" 
    #include "lua/lauxlib.h" 
    #include "lua/lua.h" 

    __declspec(dllexport) int luaopen_mylib(lua_State* L); 
} 

using namespace std; 

static int libFunc1(lua_State* L) 
{ 
    int n = lua_gettop(L); 
    printf("in myfunc stack, arg number: %d\n", n); 
    if (lua_isstring(L, -1)) 
    { 
     std::cout << lua_tostring(L, -1) << std::endl; 
    } 
    else 
    { 
     std::cout << "invalid arg" << std::endl; 
    } 
    return 1; 
} 

static const struct luaL_Reg mylib[] = {{"func1", libFunc1}, {NULL, NULL}}; 

int luaopen_mylib(lua_State* L) 
{ 
    cout << "loading my lib" << endl; 
    luaL_newlib(L, mylib); 
    return 1; 
} 

Я собирал этот CPP файл в библиотеку DLL с помощью г ++ в msys:

g++ -c -o mylib.o mylib.cpp 
g++ -shared -o mylib.dll mylib.o -Llua -llua5.3.0 

до сих пор все работает нормально, и у меня также был файл mylib.dll. но когда я пытаюсь загрузить модуль, я получил сообщ об ошибке:

> require("mylib") 
error loading module 'mylib' from file '.\mylib.dll': 
     找不到指定的程序。 

stack traceback: 
     [C]: in ? 
     [C]: in function 'require' 
     stdin:1: in main chunk 
     [C]: in ? 

китайские символы выше среднего:

The specified function could not be found. 

Я думаю, что «указанная функция» означает «luaopen_mylib», но Файл cpp имеет функцию: luaopen_mylib, ЧТО НЕПРАВИЛЬНО?

+0

Что означают китайские иероглифы? –

+0

извините за это! китайские символы означают: Указанная функция не может быть найдена. –

ответ

2

Это может быть проблема с изменением названия. Попытка:

extern "C" 
{ 
    int luaopen_mylib(lua_State* L) 
    { 
     cout << "loading my lib" << endl; 
     luaL_newlib(L, mylib); 
     return 1; 
    } 
} 
Смежные вопросы