我真的不了解这个系统。使用.RegisterDirect("myFunc",myFunc)
我可以注册一个不能获取参数的函数,但因此可以返回一个值
使用.Register("myFunc",myFunc)
我可以注册一个可以获取参数的函数,但因此不能返回任何值。
我现在在这个问题上花费了几天时间,但我无法理解。如果有人看一看,我真的很感激。
这是the documentation。以下是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;
我真的希望你能在这里帮助我。