1. main.c
-----------------
//动态库
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef _cplusplus
extern "C"{
#endif
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
static void checktoptype(lua_State *L){
if(lua_isnumber(L, -1))
printf("number");
else if(lua_isstring(L, -1))
printf("string");
else if(lua_isfunction(L, -1))
printf("function");
else if(lua_isboolean(L, -1))
printf("boolean");
else if(lua_isnil(L, -1))
printf("nil");
else if(lua_istable(L, -1))
printf("table");
else
printf("userdata or thread");
}
static int l_print(lua_State *L){
int ress[100];
int i = 1;
int n = 0;
for(; i <= 100; i++){
if(lua_isnil(L,-1)||!lua_isnumber(L, -1)){
break;
}
ress[i-1] = lua_tonumber(L, -1);//获取number,这个函数不删栈元素
lua_pop(L, 1);
n++;
}
//把值传给lua,调用lua中的print
lua_getglobal(L, "print");//获取函数
for(i = 0; i < n; i++){
lua_pushnumber(L, ress[i]);//push参数
//printf("stack level = %d, n = %d\n", lua_gettop(L), n);
lua_insert(L,2);//调整输出顺序
}
if(lua_pcall(L, n, 0, 0)){
printf("错误,lua_pcall! %s",
lua_tostring(L, -1));
return 0;
}
return n;
}
static const struct luaL_Reg l_lib[] = {
{"luaprint", l_print},
{NULL, NULL}
};
int luaopen_llib(lua_State* L){
luaL_openlib(L, "llib", l_lib, 0);//第二个参数,似乎可以随意写什么都行。
//luaL_register(L, "llib", l_lib);
return 1;
}


#ifdef _cplusplus
}
#endif

----------------
main.lua
----------------
f = function(...)
for i,v in pairs(arg) do --另外发现lua5.2中arg失去了保存可变变量的功能
print(i,v)
end
end
f(1,2);
llib = require "llib"
llib.luaprint(12,24,36,48,59)
---------------
c动态库编译方法:gcc -fPIC -llua -lm -shared -o llib.so main.c
lua执行命令: lua main.lua

lua5.2调用c函数成功的例子相关推荐

  1. 如何做EL表达式能调用的函数-小例子(转)

    先定义需要用el调用函数所在的类: 注意el所调用的方法必须是static的! Java代码 package com.qingsoft.el.function; public class CheckU ...

  2. 类的成员函数指针和静态成员函数指针 调用成员函数***

    C++提供static这个关键词对静态成员进行声明,静态成员函数和类的实例化无关,对于同一类来说,静态成员函数是所有类的对象共享的.而普通成员函数需要实例化才能调用,对于每一个实例来说,普通成员函数是 ...

  3. vc只能调用matlab子函数,VC调用matlab函数

    最近在学习matlab,先试一个VC调用matlab函数的简单例子 用的是VC++6.0,matlab7.8也就是matlabR2009 首先在matlab下设置环境 >> mbuild ...

  4. java 调用htm中js函数_Lua中调用C函数(lua5.2.3)

    Lua可以调用C函数的能力将极大的提高Lua的可扩展性和可用性.对于有些和操作系统相关的功能,或者是对效率要求较高的模块,我们完全可以通过C函数来实现,之后再通过Lua调用指定的C函数.对于那些可被L ...

  5. js调用php函数兵每秒刷新,深入理解JavaScript立即调用函数表达式(IIFE)

    立即调用函数 目录一.了解立即调用函数表达式 二.立即调用函数表达式报错了? 三.使用立即调用函数的正确姿势 四.常见使用场景 写在最后 一.了解立即调用函数表达式 1.1 思维导图 1.2 什么是立 ...

  6. python调用dll函数_关于从加载的DLL调用函数的Python基本问题

    我是在搜索和尝试各种各样的例子后提出这个问题的,但我似乎无法从加载的DLL调用函数.我想如果有人能给我举一个例子,我就能理解我做错了什么,并取得一些进展.在 首先,使用Python 3.3.3可以加载 ...

  7. matlab调用c函数语言,MATLAB调用C/C++函数的方法

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 通过MATLAB将C/C++函数编译成MEX函数,在MATLAB中就可以调用了. 1,首先装编译器 Matlab里键入m ...

  8. 在 C++Builder 工程里调用 DLL 函数

    调用 Visual C++ DLL 给 C++Builder 程序员提出了一些独特的挑战.在我们试图解决 Visual C++ 生成的 DLL 之前,回顾一下如何调用一个 C++Builder 创建的 ...

  9. 理解进程、通过调用 fork 函数创建进程

    文章目录 1.理解进程 1.1 CPU核的个数与进程数 1.2 进程 ID 2.通过调用 fork 函数创建进程 1.理解进程 进程(Process),其定义如下:"占用内存空间的正在运行的 ...

最新文章

  1. php mysql商品管理_PHP基础示例:商品信息管理系统v1.1[转]
  2. 分辨率设置640*480
  3. Hyperledger Fabric 核心模块(2)configtxgen工具
  4. 中国馆智能视频监控系统
  5. 为什么是先更新数据库再删除缓存,而不是更新缓存?
  6. Awesome Bioinformatics:假期了,收藏学习吧!
  7. 【GPU加速系列】PyCUDA(一):上手简单操作
  8. java 蓝桥杯训练 数的统计
  9. k8s的job和CronJob
  10. Spark机器学习(12):神经网络算法
  11. c语言大作业:员工工资管理系统
  12. Image data of dtype object cannot be converted to float 问题解决
  13. OpenGL:太阳、地球、月球模型模拟动画
  14. Redis伪集群搭建
  15. 当人们流行“炮轰”联想时:没想到的联想
  16. 响应式布局的实现方法
  17. 【深度学习】(问题记录)<对一个变量求梯度得到什么>-线性回归-小批量随机梯度下降
  18. 注册'@live.com'新方法!
  19. “陪伴是最长情的告白”:可是又有多少人真正懂得它的含义呢
  20. 启动monitor白屏

热门文章

  1. powershell真香
  2. [linux][c语言]用socket实现简单的服务器客户端交互
  3. 少侠,找个千手观音来帮你营销可好?
  4. 图片的另一种展现—将后台图片编码直接展现为图片
  5. 利用外部命令Oralce数据库导入导出
  6. Java12和Jdk12安装以及OpenJdk12源码
  7. 使用Cacti监控你的网络Cacti的安装
  8. DataGrid在分页状态下删除纪录的问题
  9. C++中前置声明介绍
  10. 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数