Lua 下通过虚拟栈传递参数,只要注册相应接口便可调用C函数。
#include "lua.h" // v5.1.5 #include "lualib.h" #include "lauxlib.h" // 原生函数 int ShowVal(const char *szReq, int &score); // 包装函数 int GetScore(lua_State *env) { int count = lua_gettop(env); if (count != 1) { lua_pushstring(env, "Param size not equal 3"); lua_error(env); return -1; } // 参数出栈 const char *szReq = luaL_checkstring(env, 1); // 原生接口 int code = 0, score = 0; code = ShowVal(szReq, &score); // 结果入栈 lua_pushnumber(env, code); lua_pushnumber(env, score); return 2; // 入栈参数个数 } static luaL_Reg luaLibs[] = { {"luaGetScore", GetScore}, {NULL, NULL} }; // lua接口注册 int luaopen_cloudadapi(lua_State *env) { const char *const LIBRARY_NAME = "cloudadapi"; luaL_register(env, LIBRARY_NAME, luaLibs); return 1; }
编译动态库 cloudadapi.so
测试:
require "cloudadapi" code, score = cloudadapi.luaGetScore('test') print(string.format("code:%d score:%d", code, score))
相关推荐
Lua调用C** Lua提供了一种称为"Lua C API"的接口,允许C代码直接与Lua虚拟机进行交互。这个API包括了一系列的函数,用于创建和管理Lua值,以及在Lua和C之间传递数据。例如,`luaL_newstate()`用于创建一个新的Lua...
lua调用c函数库的demo 其中实现了对一个 数组的管理。 注意lua参数与c函数的对应, 如:b=lua_dllb.getarray(a,1) static int getarray(lua_State* L) { NumArray * a=(NumArray*)lua_touserdata(L,1); //对应lua...
总结,Lua调用C/C++函数涉及到以下几个步骤: 1. 初始化Lua状态机。 2. 加载并执行Lua脚本。 3. 使用`lua_register`或`lua_pushcfunction`将C/C++函数注册到Lua。 4. 在Lua脚本中通过函数名调用这些函数。 通过这种...
在`lua 调用windows api.txt`中,可能包含了如何使用Lua调用CreateProcess函数的示例。CreateProcess是Windows API中用于创建新进程的函数,可以用来启动一个可执行文件,并获取其进程句柄,从而实现更复杂的控制: ...
在IT领域,有时候我们需要在不同的编程语言之间进行交互,例如使用脚本语言 Lua 调用 C++ 编写的动态链接库(DLL)。本示例是关于如何在 Lua 中调用由 Visual Studio 2010 编译的 C++ DLL 的教程。下面将详细介绍这...
首先,要实现LUA调用C++类,我们需要一个中间层,这个中间层通常被称为"绑定"或"包装器"。LUA的C API提供了与C/C++交互的接口,我们可以利用这些接口来创建C++类的LUA表示。这里,我们有一个名为`luawrapper`的文件...
### 如何使用Cocos2d-x自动绑定工具实现Lua调用C++ 在游戏开发领域,尤其是在使用Cocos2d-x框架进行开发时,经常会遇到需要让脚本语言(如Lua)能够调用C++代码的需求。这不仅能充分利用C++的强大性能,还能保持...
将之前生成的 C 函数封装成 Lua 可调用的形式,通常会形成 `.c` 和 `.h` 文件,例如 `luasoap.c` 和 `luasoap.h`。这些文件将使用之前生成的 C/C++ 代码来实现 Lua 对 Web Service 的调用。 #### 三、生成 Linux 下...
在Linux底下,从Lua中调用C函数的一个简单例子。
### Lua调用C函数 #### 一、引言 在软件开发中,Lua作为一种轻量级的脚本语言,因其简单高效的特点而受到广大开发者的青睐。然而,由于Lua本身的特性限制,在处理某些特定任务时可能显得力不从心,比如涉及到底层...
在本文中,我们将深入探讨如何在C++程序中集成Lua,实现C++调用Lua函数以及Lua调用C++函数。 一、C++调用Lua函数 1. 配置环境:首先,你需要在C++项目中包含Lua库。确保已经下载并正确安装了Lua,并将其头文件和库...
标题"lua调用C++函数"所涉及的知识点主要包括: 1. **Lua与C++的交互接口**:Lua提供了一个名为`luaL_newstate`的API来创建一个新的Lua状态机,这是与C++交互的基础。然后,通过`luaL_openlibs`打开标准库,使Lua...
这主要通过 Lua 的 C API 实现,它提供了一套 C 函数供外部语言(如 C++)调用,同时也允许外部代码注册函数给 Lua 使用。在 C++ 中,我们可以创建一个 Lua 共享库,其中包含用于与 Lua 交互的函数。 1. **创建 Lua...
#### 二、Lua调用C函数的优势 1. **性能提升**:对于计算密集型任务,C语言通常比Lua快得多。通过将核心逻辑放在C中,可以在保持灵活性的同时获得更好的性能。 2. **系统交互**:C语言可以直接访问底层系统资源,这...
// 处理Lua调用C函数的逻辑 } lua_register(L, "my_c_function", my_c_function); ``` 4. 用`luaL_loadfile(L, "script.lua")`或`luaL_dostring(L, "your_code_string")`加载并执行Lua代码。 5. 调用Lua函数:`lua_...
3. **处理Lua调用C**:当Lua脚本调用注册的C函数时,C函数的原型会接收一个`lua_State*`指针,它代表当前的Lua环境。通过这个指针,你可以使用`lua_gettop`获取堆栈顶的元素数量,`lua_toxx`系列函数(如`lua_to...
5. 错误处理:在C调用Lua或Lua调用C的过程中,都需要处理可能出现的错误。lua_pcall函数的返回值表示调用结果,如果出现错误,可以通过lua_tostring获取错误信息。 6. C++与Lua的结合:尽管这里提到的是C,但C++...
文件名暗示了这个例子会展示如何从Lua调用C函数。 在这个例子中,我们可能会遇到以下知识点: 1. **Lua API for C**: Lua提供了一套C语言的API,允许C代码与Lua环境进行交互。这包括创建和初始化Lua状态机,加载和...
在Delphi中,过程相似,但需使用Delphi的动态链接库(DLL)接口来调用Lua的C API。在这个例子中,"lua-5.1.1.dll"是Lua的动态链接库,Delphi程序将通过这个库与Lua进行通信。 Delphi的Pascal代码可以通过导入lua-...
Lua提供了一套C API,允许开发者在C/C++代码中嵌入Lua或让Lua调用C/C++函数。通过注册C函数到Lua全局表,Lua脚本可以直接调用这些函数。在C++中,我们可以封装C接口,然后在这些接口中调用C++类的方法。 在本实例中...