C++ 如何公开C++;lua脚本的函数?
我刚刚成功创建了一个lua项目。(迄今为止运行lua脚本的简单代码。)C++ 如何公开C++;lua脚本的函数?,c++,function,lua,C++,Function,Lua,我刚刚成功创建了一个lua项目。(迄今为止运行lua脚本的简单代码。) 但是,现在我如何使一个C++函数和一个C++变量可以用于Lua脚本? 例如: int Add(int x, int y) { return x + y; } 及 我对C++很陌生,所以我真的希望它不会太复杂。以下是我到目前为止得到的代码,顺便说一句: #include "stdafx.h" extern "C" { #include "lua.h" #include "lualib.h" #
但是,现在我如何使一个C++函数和一个C++变量可以用于Lua脚本? 例如:
int Add(int x, int y) {
return x + y;
}
及
我对C++很陌生,所以我真的希望它不会太复杂。以下是我到目前为止得到的代码,顺便说一句:
#include "stdafx.h"
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
using namespace System;
int main(array<System::String ^> ^args)
{
lua_State* luaInt;
luaInt = lua_open();
luaL_openlibs (luaInt);
luaL_dofile (luaInt, "abc.lua");
lua_close(luaInt);
return 0;
}
#包括“stdafx.h”
外部“C”{
#包括“lua.h”
#包括“lualib.h”
#包括“lauxlib.h”
}
使用名称空间系统;
int main(数组^args)
{
卢奥州*luaInt;
luaInt=lua_open();
luaL_openlibs(luaInt);
luaL_dofile(luaInt,“abc.lua”);
lua_close(luaInt);
返回0;
}
我建议使用luaapi,而不是使用luaapi
Luabind是一个专门构建高级库,用于向Lua公开C++类和函数。无需使用Lua C API函数,无需操作Lua堆栈等。它的灵感来自Boost Python,因此,如果您学习其中一个,您将基本了解另一个。
我将使用John Zwinck的答案,因为经验已经向我证明,单独使用Lua本身就是一种痛苦。但是,如果你想知道答案,请检查其他答案 要注册C/C++函数,首先需要使函数看起来像Lua提供的标准C函数模式:extern "C" int MyFunc(lua_State* L)
{
int a = lua_tointeger(L, 1); // First argument
int b = lua_tointeger(L, 2); // Second argument
int result = a + b;
lua_pushinteger(L, result);
return 1; // Count of returned values
}
每个需要在Lua中注册的函数都应该遵循这个模式。返回类型为int
,单个参数为lua\u State*L
。和返回值的计数
然后,需要将其注册到Lua的注册表中,以便将其公开到脚本的上下文中:
lua_register(L, "MyFunc", MyFunc);
要注册简单变量,可以编写以下代码:
lua_pushinteger(L, 10);
lua_setglobal(L, "MyVar");
之后,您就可以从Lua脚本调用函数了。请记住,在使用用于注册对象的特定Lua状态运行任何脚本之前,应该注册所有对象
在卢阿:
print(MyFunc(10, MyVar))
结果:
20
MyFunc
需要是extern“C”
@Simple是的,我假设Lua包含在extern“C”
中,所以我没有提到它。这正是MyFunc
需要是extern“C”
的原因<代码> LuaYCKult<代码>是一个指向C函数的指针,但是print(MyFunc(10, MyVar))