91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Lua怎么調用C++的函數和庫

發布時間:2021-09-14 11:08:35 來源:億速云 閱讀:264 作者:chen 欄目:編程語言

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

文章目錄  

  • 第一種方式

  • 第二種方式

第一種方式

新建DLL空的win32工程,新建test.cpp文件,內容如下

/*Lua調用C/C++函數/庫(動態鏈接方式)*/

#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通過函數luaI_openlib導出,然后lua使用package.loadlib導入庫函數
extern "C" __declspec(dllexport) int LuaAPIDLL(lua_State* L)//需要注意的地方,此函數命名與庫名一致
{
    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文件,結果如下

Lua怎么調用C++的函數和庫

第二種方式

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 調用外部DLL,DLL 中包含庫函數和拋出函數,當不是使用package.loadlib來使用外部DLL時, 而是使用另一種方式require,那么就需要注意一些規則:
DLL中的拋出函數原型必須是: [extern "C" ] __declspec(dllexport) int luaopen_XXX(LuaState* L),而且XXX是DLL的文件名。[]是可選符號,而package.loadlib使用方式是不需要這些規則的,但是為了兼容性好,即:DLL可以同時使用以上兩種方式使用,還是按規則命名拋出函數。
*/

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

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

os.execute("pause")

雙擊,test.lua文件輸出

Lua怎么調用C++的函數和庫

感謝各位的閱讀,以上就是“Lua怎么調用C++的函數和庫”的內容了,經過本文的學習后,相信大家對Lua怎么調用C++的函數和庫這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汕尾市| 安化县| 桑植县| 长治县| 儋州市| 白银市| 瑞昌市| 睢宁县| 南宫市| 和龙市| 定州市| 禄丰县| 黑山县| 平罗县| 宿州市| 鲁山县| 弥勒县| 普兰店市| 陆丰市| 女性| 舒兰市| 莲花县| 泸溪县| 和政县| 康乐县| 扎兰屯市| 台州市| 嘉祥县| 什邡市| 千阳县| 龙川县| 郧西县| 金山区| 锡林浩特市| 尚志市| 沙河市| 浪卡子县| 衡东县| 新竹县| 龙胜| 资兴市|