• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > Lua与C语言间的交互实例

Lua与C语言间的交互实例

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了c语言调用lua,lua实例,lua脚本实例,lua游戏脚本实例,c lua等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Lua 是一门轻巧、灵活、扩展性很强的脚本语言,它可以很容易的嵌入到其他语言(C/C++)中使用,这主要得益于其提供了功能强大的 C API,这让其跟 C/C++ 间的互调成为一件很轻松的事。

Lua 调用 C

Lua 调用 C 函数,其实就是把 C 函数注册到 Lua 中去,把 C 函数地址传递给 Lua 解释器。这个传递是要遵循一个的协议的,即:

typedef int (*lua_CFunction)(lua_State* L)
</div>

Lua 和 C 是通过栈(State)来交互的,Lua 调用 C 函数时,首先 Lua 把数据拷贝到栈上,然后 C 从栈上获取数据,调用结束后将返回结果放到栈中。栈中的每个数据通过索引值进行定位,索引值为正时表示相对于栈底的偏移索引,索引值为负时表示相对于栈顶的偏移索引,索引值以1或-1为起始值,因此栈顶索引值永远为-1 ,栈底索引值永远为1 。栈相当于数据在 Lua 和 C 之间的中转站,每一个 C 函数都有自己的独立的私有栈。

利用 Lua 提供的 C API,调用 C 函数很简单,例如下面例子:

#include <math.h>
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
 
 
static int l_sin (lua_State *L)
{
    double d = luaL_checknumber(L, 1);
    lua_pushnumber(L, sin(d));
    return 1;
}
 
static const struct luaL_Reg mylib [] = {
    {"lsin", l_sin},
    {NULL, NULL}
};
 
int luaopen_mylib(lua_State *L)
{
    luaL_openlib(L, "mylib", mylib, 0);
    return 1;
}
</div>

把上面代码编译成一个静态资源的 so 文件,加入把上面代码保存在一个名为 mylib.c 的文件下,把它编译成一个名为 libmylib.so 的静态资源文件里,gcc 编译语句如下:

gcc mylib.c -fPIC -shared -o libmylib.so
</div>

把上面代码放在 LUA_CPATH 目录下(LUA_CPATH 目录位置说明详看《Lua 学习笔记(4) -- 模块与包》,这里就不多说了)。

把 libmylib.so 资源文件加载到模块目录下后,就可以在 Lua 代码里直接加载 require 进来使用,例如如下使用:

require "mytestlib"
print(mylib1.lsin(10))
</div>

</div>

您可能想查找下面的文章:

  • Lua编程示例(七):协同程序基础逻辑
  • 使用Lua作为C语言项目的配置文件实例
  • C语言中调用Lua函数实例
  • C语言模块回调Lua函数的两种方法
  • Lua与C语言间的交互实例
  • C语言中通过LUA API访问LUA脚本变量的简单例子
  • Lua和C语言的交互详解

相关文章

  • Redis教程(五):Set数据类型
  • Lua性能优化技巧(四):关于字符串
  • Lua面向对象之多重继承、私密性详解
  • Mac平台中编译安装Lua运行环境及Hello Lua实例
  • Lua模块和模块载入浅析
  • Lua中的迭代器和泛型for介绍
  • Lua教程(十): 全局变量和非全局的环境
  • Lua读取和写入文件处理例子
  • 举例详解Lua中的协同程序编程
  • Lua中的函数浅析

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Lua教程(四):函数详解
    • Lua教程(二十二):userdata
    • Lua学习笔记之表达式
    • 使用Lua编写Nginx服务器的认证模块的方法
    • Lua获取网络时间(获取时间同步服务器的时间)
    • 使用Lua作为C语言项目的配置文件实例
    • Lua利用cjson读写json示例分享
    • Lua中的控制结构(流程控制)简明总结
    • 使用nginx+lua实现信息访问量统计
    • Lua学习笔记之数据结构

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有