设为首页 加入收藏

TOP

Lua入门之三:Lua调用C/C++库(动态链接方式)
2014-11-23 20:28:53 来源: 作者: 【 】 浏览:21
Tags: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


#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插件的设置:


Lua入门之三:Lua调用C/C++库(动态链接方式)


示例工程的下载地址:


具体下载目录在 /2014年资料/9月/19日/Lua入门之三:Lua调用C&C++库(动态链接方式)


--------------------------------------分割线 --------------------------------------


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Lua入门之二:C/C++ 调用Lua及多.. 下一篇使用 AngularJS 创建的 RSS 阅读..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: