lua调用c/c++代码
来源:互联网 发布:安卓php环境 编辑:程序博客网 时间:2024/06/06 13:09
使c作为内嵌代码
这里我说简单的说一下这个方式,直接看代码和注视吧。
extern "C"{#include <lua.h>#include<lauxlib.h>#include <lualib.h>};#pragma comment(lib, "lua5.1.lib") //待lua调用的c函数static int getcchar(lua_State *L){//压入lua的栈其实严格的来说lua的调用c的函数是通过栈来完成的lua_pushstring(L,"I am from c");return 1; //这里的返回值是入栈的个数}int main(){lua_State *L= luaL_newstate(); //得到lua解释器的指针luaL_openlibs(L);//载入lua库//注册全局函数 第二个是lua字符串第三个是函数指针lua_register(L,"getcchar",getcchar);luaL_dostring(L,"print(getcchar())");lua_close(L);return 0;}其实lua调用c他们之间并没有直接交互而是通过栈来交互的,当函数return过后lua就会自动释放了。
通过链接库来调用
由于我是在vs里面写的代码所以我就讲一下怎么编译成windows的链接库让lua来调用它,我们用vs新建一个dll的工程。然后也直接看代码。
#include <lua.hpp>#pragma comment(lib, "lua5.1.lib") //待调用c函数特别说明一下改函数必须是以extern "C" 导出的extern "C" int add(lua_State *L){if(lua_isnumber(L,1)&&lua_isnumber(L,2)) //判断一下是不是数字lua_pushnumber(L,lua_tonumber(L,1)+lua_tonumber(L,2)); //通过栈来传递return 1; //返回结果个数其实就是压入栈的个数}extern "C" int cgetchar(lua_State *L){lua_pushstring(L,"hell lua i am c"); //压入栈return 1;}//luaL_Reg结构体的第一个字段为字符串,在注册时用于通知Lua该函数的名字。//第一个字段为C函数指针。//结构体数组中的最后一个元素的两个字段均为NULL,用于提示Lua注册函数已经到达数组的末尾。static luaL_Reg libs[] = { {"add", add}, {"cgetchar",cgetchar}, {NULL, NULL}};//该C库的唯一入口函数。其函数签名等同于上面的注册函数。见如下几点说明: //1. 我们可以将该函数简单的理解为模块的工厂函数。 //2. 其函数名必须为luaopen_xxx,其中xxx表示library名称。Lua代码require "xxx"需要与之对应。 //3. 在luaL_register的调用中,其第一个字符串参数为模块名"xxx",第二个参数为待注册函数的数组。 //4. 需要强调的是,所有需要用到"xxx"的代码,不论C还是Lua,都必须保持一致,这是Lua的约定, // 否则将无法调用。 extern "C" __declspec(dllexport) int luaopen_luacdll(lua_State* L) { const char* libName = "luacdll"; luaL_register(L,libName,libs); return 1; }然后我们编译出dll链接库,拷贝到lua的安装目录下我的是E:\Lua\5.1\clibs这个目录下面然后我们写入lua代码然后看结果。
a=require"luacdll"print(a.add(3,10))print(a.cgetchar())结果是
13
hell lua i am c
0 0
- lua调用c/c++代码
- 在C中调用Lua代码
- [Lua]C/C++调用Lua
- [lua]C调用lua函数
- C/C++ 调用 Lua
- c调用lua脚本
- Lua调用C函数
- C调用lua
- lua 调用c函数
- lua c/c++ 调用
- Lua调用C函数
- lua调用c函数
- Lua调用C函数
- c调用lua
- c 调用 lua
- c、c++调用lua
- c/c++ 调用lua
- lua调用C函数
- Linux有趣命令
- stitcher类轻松实现图像拼接
- 汇编指令大全
- silverlight-RenderTransform特效
- 手游开发必备工具:TexturePack
- lua调用c/c++代码
- 面试经
- 算法-求二进制数中1的个数
- UML基础2
- Qt 汉字内码及区位码 提取
- Eclipse自动注释-类和方法
- 小总结
- dll中多线程使用回调函数
- 宗敎는 神道의 敎_새 宗敎의 出現