lua三底漆:lua转让c/c++库(动态链接模式)
dll按功能luaL_openlib出口,然后lua使用package.loadlib导入库函数,基本就是这么个过程,以下上代码来说明一切。
#include "stdafx.h" #ifdef __cplusplus
extern "C"{
#endif #include "lua.h"
#include "lualib.h"
#include "lauxlib.h" #ifdef __cplusplus
}
#endif #include <math.h> #pragma comment(lib, "lua51.lib") static int math_abs(lua_State *L)
{
lua_pushnumber(L, abs((int)luaL_checknumber(L, 1))); return 1;
} static int math_cos(lua_State *L)
{ lua_pushnumber(L, cos((double)luaL_checknumber(L, 1))); return 1; } static int math_sin(lua_State *L)
{ lua_pushnumber(L, sin((double)luaL_checknumber(L, 1))); return 1;
} static const luaL_reg mathlib[] = {
{ "abs", math_abs },
{ "cos", math_cos },
{ "sin", math_sin },
{ NULL, NULL }
}; static int ShowMessage(lua_State * L)
{
lua_pushnumber(L, 1000);
printf("show message and push 1000 \n");
return -1;
} #ifdef _WIN32
extern "C" __declspec(dllexport) int luaopen_luadlllib(lua_State* L)
{
#else
extern "C" int luaopen_luadlllib(lua_State* L)
{ #endif // _WIN32 //MessageBox(NULL, TEXT("Register C++ Functions..."), NULL, MB_OK); luaL_openlib(L, "DY_MATH", mathlib,0);
return 1;
}
--region loadlib.lua
--Date
--此文件由[BabeLua]插件自己主动生成 --(package.loadlib("./../Debug/libforlua", "luaopen_luadlllib"))()
--(package.loadlib("./../Debug/libforlua.dll", "luaopen_luadlllib"))()
local libpath="./../Debug/libforlua.dll"
local loadlibfunc=package.loadlib(libpath,"luaopen_luadlllib")
loadlibfunc() function COS(a)
print("called COS in lua script")
return DY_MATH.cos(a)
end function SIN(a)
print("called SIN in lua script")
return DY_MATH.sin(a)
end function SHOWMESSAGE()
showmessage()
end print(COS(60*3.1415926/180)) print("enter a number:")
a = io.read("*number") --endregion
babelua插件的设置:
演示样例project的下载地址:http://download.csdn.net/detail/x356982611/7401781
版权声明:本文博客原创文章,博客,未经同意,不得转载。
lua三底漆:lua转让c/c++库(动态链接模式)的更多相关文章
- 生成lua的静态库.动态库.lua.exe和luac.exe
前些日子准备学习下关于lua coroutine更为强大的功能,然而发现根据lua 5.1.4版本来运行一段代码的话也会导致 "lua: attempt to yield across me ...
- LTUI v1.1, 一个基于lua的跨平台字符终端UI界面库
简介 LTUI是一个基于lua的跨平台字符终端UI界面库. 此框架源于xmake中图形化菜单配置的需求,类似linux kernel的menuconf去配置编译参数,因此基于curses和lua实现了 ...
- 限流(三)Redis + lua分布式限流
一.简介 1)分布式限流 如果是单实例项目,我们使用Guava这样的轻便又高性能的堆缓存来处理限流.但是当项目发展为多实例了以后呢?这时候我们就需要采用分布式限流的方式,分布式限流可以以redis + ...
- Lua 架构 The Lua Architecture
转载自:http://magicpanda.net/2010/10/lua%E6%9E%B6%E6%9E%84%E6%96%87%E6%A1%A3/ Lua架构文档(翻译) 十 102010 前段时间 ...
- VC和VS调用Lua设置以及Lua C API使用。
通过c++调用lua 脚本, 环境VC++6.0 lua sdk 5.1.4 在调用前先认识几个函数.1.调用lua_open()将创建一个指向Lua解释器的指针.2. luaL_ope ...
- 02:Sysbench基准压测(oltp_update_index.lua、oltp_update_non_index.lua)my.cnf
目录 Sysbench 基准压测 my.cnf 一.Sysench测试前准备 1.1.压测环境 二.进行OLTP_update测试 2.1.安装压测工具sysbench 2.2.执行压测 三.执行结果 ...
- vJine 第三波 之 Lua 来袭 vJine.Lua
vJine.Lua vJine.Lua是Lua语言的C#封装库,可实现通过C#直接运行Lua脚本并与Lua脚本交互的功能. 1. 授权: MPL2.0 相关资源: nuget:(https://www ...
- 通过lua栈了解lua与c的交互
lua是如何执行的 其中分析.执行部分都是c语言实现的. lua与c的关系 lua的虚拟机是用c语言实现的,换句话说一段lua指令最终在执行时都是当作c语言来执行的,lua的global表,函数调用栈 ...
- lua编程之lua与C相互调用
lua是扩展性非常良好的语言,虽然核心非常精简,但是用户可以依靠lua库来实现大部分工作.除此之外,lua还可以通过与C函数相互调用来扩展程序功能.在C中嵌入lua脚本既可以让用户在不重新编译代码的情 ...
随机推荐
- JavaScript类数组对象参考
JavaScript和DOM中有很多类数组对象,它们有以下特点 1.有length属性 2.可以使用[]通过下标访问 3.部分类数组对象使用[]访问成员时不只可以使用下标,还可以使用id或name 4 ...
- 正确Linux新手很实用20命令
//正确Linux新手很实用20命令 //slwang 2014.4.19 1, ls list directory contents 内容 ls -l //以详情模式(long li ...
- 三种方法让你的Service不被“一键加速”和系统杀掉
基本上大家都知道提高service优先级能够在非常大程度上让你的service免于由于内存不足而被kill,当然系统仅仅是在此时先把优先级低的kill掉,假设内存还是不够,也会把你的service干掉 ...
- Git代理服务器设置和访问Github
因为现在工作的网络环境有着非常严格的限制,.可以说,在最近的访问通过代理Github它采取了一些曲折的.也积累了一些相关经验.我们认为有必要注意什么. 符合"不要再发明轮子"宗旨, ...
- 将php分页类YII绑定框架,就需要改变风格的基础
分页类http://blog.csdn.net/buyingfei8888/article/details/40260127 在内部组件分页类 文件名和一致 组件是在什么地方被载入进来的?在主配置文件 ...
- Python re正则表达式
参考: 博客园<Python正則表達式指南> 博客园<Python之re模块> 在此感谢博主的无私奉献,本文主要介绍python中re模块的几个简单使用方法.具体的使用方法请參 ...
- SRM 628 D1L3:DoraemonPuzzleGame,math,后市展望,dp
称号:c=problem_statement&pm=13283&rd=16009">http://community.topcoder.com/stat?c=probl ...
- 微软中国裁员曝光:在CD结束后!薪酬不变!
聚众抗议的前诺基亚员工(腾讯科技配图) 腾讯科技 郭晓峰 腾讯科技刚刚获取了一份微软设备事业部中国区管理团队4日晚间发给被裁员工的补偿方案邮件. 邮件内容显示,微软承诺在收购诺基亚交易结束(2014年 ...
- UVA How Big Is It?
题目例如以下: How Big Is It? Ian's going to California, and he has to pack his things, including hiscolle ...
- MongoDB时间处理问题
MongoDB保存到数据库的时候,默认为UTC时间,在数据库保存时,会和当前时间有个间隔,差距为8小时. 在读取的时候,需要再次转换回来,比较麻烦. 其实,Mongo本身就已经提供了相应的处理方法,即 ...