欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++與Lua交互原理實例詳解

 更新時間:2021年03月01日 16:13:20   作者:PHP開發(fā)社區(qū)  
這篇文章主要介紹了C++與Lua交互原理實例詳解,有感興趣的同學可以研究下

首先,不同語言交互,我們一般把這種編程方式稱為混合編程。開發(fā)中為什么要多語言混合使用,只用c++不行嗎?答案是因為腳本語言語法糖多使用方便、沙盒式安全機制使系統(tǒng)更穩(wěn)定、簡單易學降低開發(fā)成本等,那么,只用腳本不行嗎?那也是不合理的,因為與系統(tǒng)api的接口、計算密集性模塊的性能要求等是腳本語言不擅長的,這一部份仍然需要c/c++來完成。因此,為了綜合各自的優(yōu)勢,就出現(xiàn)了混合編程的需要。

那么,在一個程序的生命周期里,具體哪些部份c++寫,哪些部份是腳本寫?它們的交互接口又在哪里?一般與系統(tǒng)緊密相關的,如程序啟動、創(chuàng)建窗口及渲染器、事件循環(huán)分發(fā),各種窗口消息、網(wǎng)絡事件的接收分發(fā)等一般c++來做。而具體邏輯相關的,如消息和事件的處理器(事件驅(qū)動),會根據(jù)傳入的參數(shù)及當前狀態(tài)做出反應,包括改變腳本自身環(huán)境內(nèi)的變量,調(diào)用綁定的c函數(shù)從而修改c/c++端的變量等一般腳本來做。

然后,它們又是在哪里交互的,怎么交互的?簡單點講就是維護了一個堆棧,需要交互的數(shù)據(jù)通過入棧,出棧操作來傳遞數(shù)據(jù)。而具體腳本語言的實現(xiàn)機制,一般來說都會有一個編譯模塊、一個虛擬機(執(zhí)行)模塊、一套類型實現(xiàn)及數(shù)據(jù)管理模塊,通常還會有一個供外部操作的接口,如lua c api,這個接口讓嵌入方得以操作腳本狀態(tài)(如訪問變量、調(diào)用函數(shù)、管理內(nèi)存),實現(xiàn)交互。

最后,總結(jié)一下,所有程序最終都是以機器碼的形式被硬件CPU執(zhí)行,從這個角度去看,不同語言的代碼并沒有本質(zhì)區(qū)別,最終都是被編譯器編譯從二進制機器碼,而所謂交互,就是在處理共享數(shù)據(jù)而已。

tolua工具的使用
cocos2dx c++與lua 綁定具體流程:使用的cocos版本是3.4,Mac環(huán)境,但Windows上和cocos的其它版本流程也是一樣。

修改cocos本身的類接口綁定到Lua

具體步驟:

1,找到cocos自帶的綁定工具腳本文件genbindings.py,在cocos工程的frameworks/cocos2d-x/tools/tolua這個目錄下,把這個文件打開。

2,在打開的genbindings.py文件下面找到這么一段代碼:


在這里插入圖片描述

這里就是運行這個腳本會自動生成lua綁定代碼的所有對象和這些對象所在的目錄與綁定代碼生成的目的路徑,#是注釋,通過它指定只生成修改過的模塊的綁定代碼。

3,運行genbindings.py,打開命令行工具,cd到這個目錄,再在當前目錄運行這個腳本。(1,cd + tolua目錄路徑 2,./genbindings.py)

4,xcode重新編譯下c++代碼,綁定成功。

自定義類綁定到Lua

1,寫好自定義類,我們一般把這個類放在Classes目錄,我自己項目的目錄如下:


在這里插入圖片描述

2,寫好這個類的.ini配置文件,copy其它的.ini配置,只需要改下類名空間,路徑等,多個類寫一個配置里信息用空格隔開。具體示意圖如下:
我的配置文件:


在這里插入圖片描述

配置文件主要修改地方:


在這里插入圖片描述

3,運行genbindings.py腳本,就會在指定目錄自動生成自定義類綁定到lua的代碼。

在這里插入圖片描述

4,最后是把生成的綁定代碼注冊到lua環(huán)境棧,如圖所示:


在這里插入圖片描述

cocos AppDelegate.cpp里的這個代碼完成的創(chuàng)建lua環(huán)境棧和注冊:


在這里插入圖片描述

注意事項

1,自己新增的自定義類,打包到andriod上時,需要修改安卓的打包配置,把新增的文件添加進去(不光針對這里,所有打安卓包,新增的東西都是要加入到這個配置中才會拷貝)。示意圖如下:


在這里插入圖片描述
在這里插入圖片描述

2,mac終端中執(zhí)行genbindings.py這個腳本,如果報“ImportError: No module named yaml”這個錯誤,解決方式是:在終端中逐個輸入:以下3句命令,mac會自動幫我們下載安裝這3個東東,安裝完畢就可以了。
在終端分別逐行輸入以下內(nèi)容:

sudo easy_install pip
sudo pip install PyYAML
sudo pip install Cheetah

到此這篇關于C++與Lua交互原理實例詳解的文章就介紹到這了,更多相關C++與Lua交互原理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 用typedef定義類型的總結(jié)分析

    用typedef定義類型的總結(jié)分析

    除了可以直接使用C提供的標準類型名(如:int ,char ,float,double,long等)和自己聲明的結(jié)構體、共用體、枚舉類型外,還可以使用typedef聲明 新的類型名 來代替 已有的 類型名
    2013-08-08
  • C++中vector容器的用法

    C++中vector容器的用法

    在c++中,vector是一個十分有用的容器。這篇文章主要介紹了C++ vector容器的用法的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-10-10
  • 如何查看進程實際的內(nèi)存占用情況詳解

    如何查看進程實際的內(nèi)存占用情況詳解

    本篇文章是對如何查看進程實際的內(nèi)存占用情況進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • VS2019 更新MSDN并創(chuàng)建快捷方式的實現(xiàn)

    VS2019 更新MSDN并創(chuàng)建快捷方式的實現(xiàn)

    這篇文章主要介紹了VS2019 更新MSDN并創(chuàng)建快捷方式的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • C語言 CRITICAL_SECTION用法案例詳解

    C語言 CRITICAL_SECTION用法案例詳解

    這篇文章主要介紹了C語言 CRITICAL_SECTION用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • opencv利用霍夫變換檢測直線進行圖片校正

    opencv利用霍夫變換檢測直線進行圖片校正

    這篇文章主要為大家詳細介紹了opencv利用霍夫變換檢測直線對圖片進行校正,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C++ LibCurl實現(xiàn)Web指紋識別功能

    C++ LibCurl實現(xiàn)Web指紋識別功能

    Web指紋識別是一種通過分析Web應用程序的特征和元數(shù)據(jù),以確定應用程序所使用的技術棧和配置的技術,本文將通過C++中LibCurl庫實現(xiàn)簡單是指紋識別功能,感興趣的可以了解下
    2023-11-11
  • C語言超詳細講解函數(shù)棧幀的創(chuàng)建和銷毀

    C語言超詳細講解函數(shù)棧幀的創(chuàng)建和銷毀

    我們知道c語言中函數(shù)都是被調(diào)用的,main函數(shù)里面能調(diào)用其他函數(shù),其實main函數(shù)也是被別的函數(shù)調(diào)用的,下面通過本文給大家分享c語言函數(shù)棧幀的創(chuàng)建和銷毀過程,一起看看吧
    2022-05-05
  • 淺談c++調(diào)用python鏈接的問題及解決方法

    淺談c++調(diào)用python鏈接的問題及解決方法

    下面小編就為大家?guī)硪黄獪\談c++調(diào)用python鏈接的問題及解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • C++統(tǒng)計中英文大小寫字母、數(shù)字、空格及其他字符個數(shù)的方法

    C++統(tǒng)計中英文大小寫字母、數(shù)字、空格及其他字符個數(shù)的方法

    這篇文章主要介紹了C++統(tǒng)計中英文大小寫字母、數(shù)字、空格及其他字符個數(shù)的方法,涉及C++字符串的遍歷與簡單判定技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-05-05

最新評論