1

システムがよくわかりません。I を使用する.RegisterDirect("myFunc",myFunc)と、パラメーターを受け取ることはできないが、値を返すことができる関数を登録できます。
I を使用する.Register("myFunc",myFunc)と、パラメーターを受け取ることができる関数を登録できますが、値を返すことはできません。

私は文字通りこの問題に何日も費やしましたが、それを理解することはできません. 誰かがこれを見てくれたら、本当に感謝します。

ここにドキュメントがあります。Registerとの簡単な例を次に示しますRegisterDirect。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; // We don't return any values to the script
}

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) ) {
        // An error occured
        if( pState->GetTop() == 1 )
            std::cout << "An error occured: " << pState->CheckString(1) << std::endl;
    }
    LuaPlus::LuaState::Destroy( pState );
    pState = nullptr;
    getchar();
    return 0;
}

Afaik スタックに値をプッシュし、スタックに何かがあることを示すために 1 を返す必要があります。しかし、それはうまくいかないようでした。これを関数に追加して、数値4を返そうとしました:

pState->PushInteger(4);
return 1;

ここで私を助けてくれることを本当に願っています。

4

0 に答える 0