当前位置: 首页> 房产> 建筑 > 平面设计和电商设计的区别_陕西省工程造价信息网官网_网络营销策略有哪些_优化网站seo策略

平面设计和电商设计的区别_陕西省工程造价信息网官网_网络营销策略有哪些_优化网站seo策略

时间:2025/7/15 15:11:44来源:https://blog.csdn.net/sinat_41629921/article/details/146291136 浏览次数:0次
平面设计和电商设计的区别_陕西省工程造价信息网官网_网络营销策略有哪些_优化网站seo策略

1 简介

在上节学习了如何编写可以在lua语言中调用的C函数,但是要想使用这个C函数,我们必须在程序中使用lua_register函数进行注册,再重新进行编译.对于另外一种情况就是程序已经编译好,如lua解释器等,要想使用如前面的C_add函数,必须重新修改lua.c的源码重新编译比较麻烦,可以采用这个函数写成C模块方式并编译成动态链接库模式,使用时再采用lua加载模块方式载入。

2 C模块代码

编写C模块代码,并声明一个mylib数组,定义一个luaopen_mylib打开函数,具体如下.

//06C模块代码.c
//编译为mylib.dll可以在lua动态载入
#include <stdio.h>
#include <stdlib.h>// Lua数据类型与函数接口
#include "lua.h" 
// Lua与C交互辅助函数接口    
#include "lauxlib.h" 
// Lua标准库打开接口
#include "lualib.h"  // 定义C函数,与上一节相同
static int C_add( lua_State* L){printf("使用lua调用C函数C_add成功\n");//使用lua_tointeger按索引获取栈L的元素//索引1为函数参数1,2为函数参数2,以此类推.//lua传递参数给C语言需进行数据转换,//因为这个函数参数均为整数,所以使用lua_tointeger//若其他数据类型,需使用类似的lua_to*函数int a1 = lua_tointeger(L,1);int a2 = lua_tointeger(L,2);int a3 = lua_tointeger(L,3);//打印各个参数的值printf("第1个参数=%d\n",a1);printf("第2个参数=%d\n",a2);printf("第3个参数=%d\n",a3);//将三个参数值相加并压入栈//使用lua_pushinteger函数将整数值压入,其他数据类型需使用类似lua_push*函数//若有多个返回值,按顺序压入栈lua_pushinteger(L,a1+a2+a3);// 返回值为lua函数add的返回值数量,为1.return 1;
}//声明一个数组,数组元素类型为luaL_Reg,字段分布为{注册函数名字符串,函数指针}
//最后一项必须为{NULL,NULL}	
static const struct luaL_Reg mylib[]={{"add",C_add},{NULL,NULL}	
};// 定义C模块打开函数
int luaopen_mylib(lua_State *L){// 对函数 lual_newlib的调用会新创建一个表,// 并使用由数组 mylib指定的“函数名-函数指针”填充这个新创建的表。// 当lual_newlib返回时,它把这个新创建的表留在了栈中,在表中它打开了这个库。luaL_newlib(L,mylib);//返回1,表示将这个表返回给Lua。return 1;
}

3 编译C模块

使用需将上诉C模块代码编译为mylib.dll才能使用,在批处理界面输入编译指令如下

::编译为动态链接库mylib.dll,编译需用到lua.dll
tcc -shared -rdynamic -I %lua_src% lua.dll 06C模块代码.c  -o mylib.dll

4 编写调用C程序

对上一节程序修改如下,在lua语言中动态加载mylib.dll并使用。

//07lua中调用C模块
#include <stdio.h>
#include <stdlib.h>// Lua数据类型与函数接口
#include "lua.h" 
// Lua与C交互辅助函数接口    
#include "lauxlib.h" 
// Lua标准库打开接口
#include "lualib.h"  int main()
{// 创建Lua状态lua_State* L = luaL_newstate();           // 打开标准库luaL_openlibs(L);  // 解析并执行Lua脚本字符串luaL_dostring(L,"-- 使用require函数载入C模块mylibmylib=require('mylib')-- 调用mylib库中的add函数a=mylib.add(7,2,5)print('a=',a) -->14");// 关闭Lua线程lua_close(L);                             return 0;
}

运行结果如下
在这里插入图片描述

5 在lua解释器中使用C模块

在上面例子中C模块是在lua动态载入,也可以在已编译好的程序中载入该c模块。如我们常用的lua解释器。
先创建一个lua解释器,在批处理窗口输入编译并运行lua解释器

::编译lua解释器
tcc -I %lua_src% lua.def %lua_src%\lua.c -o lua.exe
::运行lua解释器
lua

输入下面lua代码即可调用C模块函数

-- 使用require函数载入C模块mylib
mylib=require('mylib')
-- 调用mylib库中的add函数
a=mylib.add(7,2,5)
print('a=',a) -->14

运行结果如下。
在这里插入图片描述

关键字:平面设计和电商设计的区别_陕西省工程造价信息网官网_网络营销策略有哪些_优化网站seo策略

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: