歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

示例工程的下載地址:

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2014年資料/9月/19日/Lua入門之三:Lua調用C&C++庫(動態鏈接方式)

下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm

--------------------------------------分割線 --------------------------------------

Lua 語言 15 分鐘快速入門 http://www.linuxidc.com/Linux/2013-06/86582.htm

Lua程序設計(第2版)中文 PDF http://www.linuxidc.com/Linux/2013-03/81833.htm

Lua程序設計(第二版)閱讀筆記 http://www.linuxidc.com/Linux/2013-03/81834.htm

NetBSD 將支持用 Lua 腳本開發內核組件 http://www.linuxidc.com/Linux/2013-02/79527.htm

CentOS 編譯安裝 Lua LuaSocket http://www.linuxidc.com/Linux/2011-08/41105.htm

Lua 的詳細介紹:請點這裡
Lua 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved