LuaPlus:注册带有参数和一个返回值的函数?

我实际上不太理解该系统。使用.RegisterDirect("myFunc",myFunc),我可以注册一个不能接受参数但可以返回值的函数。

使用.Register("myFunc",myFunc),我可以注册一个可以接受参数但不能返回任何值的函数。

我已经花了几天时间研究这个问题,但我就是想不出来。如果有人能看一看,我会非常感激。

这是文档。以下是RegisterRegisterDirect的快速示例。假设我希望Print函数总是返回字符串“hello”。我该怎么做?

#include "stdafx.hpp"
int Print(LuaPlus::LuaState* pState) {
    int top = pState->GetTop();
    std::stringstream output;
    for( int i = 1; i <= top; ++i ) {
        output << pState->CheckString(i) << std::endl;
    }
    std::cout << output.str();
    return 0; // 我们不会向脚本返回任何值
}

int Get2222() {
    return 2222;
}

int main() {
    LuaPlus::LuaState* pState = LuaPlus::LuaState::Create( true );
    LuaPlus::LuaObject globals = pState->GetGlobals();
    globals.Register("Print",Print);
    globals.RegisterDirect("Get2222",Get2222);
    char pPath[ MAX_PATH ];
    GetCurrentDirectory(MAX_PATH,pPath);
    strcat_s(pPath,MAX_PATH,"\\test.lua");
    if( pState->DoFile(pPath) ) {
        // 发生错误
        if( pState->GetTop() == 1 )
            std::cout << "An error occured: " << pState->CheckString(1) << std::endl;
    }
    LuaPlus::LuaState::Destroy( pState );
    pState = nullptr;
    getchar();
    return 0;
}

据我所知,我必须将该值推到堆栈上并返回1以表示堆栈上有东西。但那似乎没有起作用。我尝试将以下内容添加到函数中以返回数字4:

pState->PushInteger(4);
return 1;

我真的希望你能帮助我。

点赞