成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Lua怎么調(diào)用C++的函數(shù)和庫

這篇文章主要講解了“Lua怎么調(diào)用C++的函數(shù)和庫”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Lua怎么調(diào)用C++的函數(shù)和庫”吧!

目前創(chuàng)新互聯(lián)已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機網(wǎng)站托管運營、企業(yè)網(wǎng)站設(shè)計、大冶網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

文章目錄 

  • 第一種方式

  • 第二種方式

第一種方式

新建DLL空的win32工程,新建test.cpp文件,內(nèi)容如下

/*Lua調(diào)用C/C++函數(shù)/庫(動態(tài)鏈接方式)*/

#include<iostream>
using namespace std;
#include<lua.hpp>

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 }
};

//dll通過函數(shù)luaI_openlib導(dǎo)出,然后lua使用package.loadlib導(dǎo)入庫函數(shù)
extern "C" __declspec(dllexport) int LuaAPIDLL(lua_State* L)//需要注意的地方,此函數(shù)命名與庫名一致
{
    luaI_openlib(L,"DY_MATH",mathlib,0);
    return 1;
}

lualoadlib.lua文件

--region lualoadlib.lua

local libpath="./../Debug/LuaAPIDLL.dll"
local loadlibfunc=package.loadlib(libpath,"LuaAPIDLL")
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

print(COS(60*3.1415926/180))
print(SIN(30))

os.execute("pause") --直接雙擊此文件,cmd窗口不會消失

--endregion

直接雙擊lualoadlib.lua文件,結(jié)果如下

Lua怎么調(diào)用C++的函數(shù)和庫

第二種方式

test.cpp部分代碼

#include<iostream>
using namespace std;
#include<lua.hpp>
static int testFunc(lua_State *L)
{
    printf("http://www.jellthink.com\n");
    lua_pushnumber(L, 10);
    return 1;
}
static const struct luaL_Reg myLib[] = 
{
    {"test", testFunc},
    {NULL, NULL}
};
extern "C" __declspec(dllexport) int luaopen_LuaAPIDLL(lua_State* L)
{
    luaL_register(L,"testDll",myLib);
    return 1;
} 
/*
LUA 調(diào)用外部DLL,DLL 中包含庫函數(shù)和拋出函數(shù),當(dāng)不是使用package.loadlib來使用外部DLL時, 而是使用另一種方式require,那么就需要注意一些規(guī)則:
DLL中的拋出函數(shù)原型必須是: [extern "C" ] __declspec(dllexport) int luaopen_XXX(LuaState* L),而且XXX是DLL的文件名。[]是可選符號,而package.loadlib使用方式是不需要這些規(guī)則的,但是為了兼容性好,即:DLL可以同時使用以上兩種方式使用,還是按規(guī)則命名拋出函數(shù)。
*/

test.lua文件要與LuaAPIDLL.dll文件在同一個目錄中,內(nèi)容如下

require "LuaAPIDLL"
local a = testDll.test()
print(a)

os.execute("pause")

雙擊,test.lua文件輸出

Lua怎么調(diào)用C++的函數(shù)和庫

感謝各位的閱讀,以上就是“Lua怎么調(diào)用C++的函數(shù)和庫”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Lua怎么調(diào)用C++的函數(shù)和庫這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

網(wǎng)站題目:Lua怎么調(diào)用C++的函數(shù)和庫
鏈接URL:http://jinyejixie.com/article26/ggiejg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、外貿(mào)建站、關(guān)鍵詞優(yōu)化、自適應(yīng)網(wǎng)站、網(wǎng)站制作App設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司
湖州市| 甘谷县| 高要市| 沙洋县| 门源| 比如县| 民乐县| 兴文县| 喀什市| 阿拉尔市| 横山县| 宜兰市| 台前县| 淮安市| 皮山县| 大田县| 子洲县| 襄垣县| 永城市| 松潘县| 阿巴嘎旗| 台江县| 交口县| 丹江口市| 全椒县| 雷波县| 基隆市| 淳化县| 英吉沙县| 新营市| 白沙| 斗六市| 长子县| 台安县| 格尔木市| 延寿县| 土默特右旗| 清新县| 民丰县| 二手房| 南岸区|