Я не очень понимаю систему. С помощью .RegisterDirect("myFunc",myFunc)
Я могу зарегистрировать функцию, которая не может принимать параметры, но поэтому может возвращать значение.
С помощью .Register("myFunc",myFunc)
Я могу зарегистрировать функцию, которая может принимать параметры, но не может возвращать никаких значений.
Я буквально потратил дни на эту проблему сейчас, и я просто не могу понять это. Я был бы очень признателен, если бы кто-то взглянул на это.
Вот документация. Вот быстрый пример того, как Register
а также RegisterDirect
, Допустим, я хотел, чтобы функция Print всегда возвращала строку «привет». Как бы я это сделал?
#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;
Я действительно надеюсь, что вы можете помочь мне здесь.
Задача ещё не решена.