C++與Lua進資料交換的工具函式
1)tolua.type
返回一個 C++ 物件的型別描述字串
格式:
self.studio.layout = cc.CSLoader:createNode(GAMETABLE_CSB);
print(tolua.type(self.studio.layout)) -- 輸出 cc.Node
2)tolua.cast
強制轉換物件型別
格式:
tolua.cast(物件, 型別名稱)~~
3)tolua.isnull
檢查指定 Lua 值中儲存的 C++ 物件是否已經被刪除。
我們在將 C++ 物件儲存到 Lua 值後。只要還有 Lua 程式碼在使用這些值,那麼即使 C++ 物件已經被刪除了,但 Lua 值仍然會存在。如果此時呼叫 Lua 值的方法就會出錯。
因此可以用 tolua.isnull() 檢查 Lua 值中的 C++ 物件是否已經被刪除。
已刪除 返回 true 沒有被刪除 返回 false
同時,還要注意一個問題,C/C++分配的記憶體在Lua中表現為一個userdata型別,且這個型別不受Lua垃圾回收機制的管理,所以有時成員變數已經移除了,但是這個型別沒有回收
if self.btnLayer then self.btnLayer:removeFromParent() self.btnLayer = nil end local btnLayer = createBtnLayer(btnInfo); btnLayer:setLocalZOrder(Cur_Max_Z_Order); btnLayer:setName("isHaveBtnLayer") self.btnLayer = btnLayer self:addChild(btnLayer);
其中createBtnLayer是一個Layer層,在Layer層中點選一個按鈕是已經移除,可是self.btnLayer還是存在
這是在移除Layer層之前,把self.btnLayer = nil 這時才沒有問題
相關推薦
C++與Lua進資料交換的工具函式
1)tolua.type 返回一個 C++ 物件的型別描述字串 格式: self.studio.layout = cc.CSLoader:createNode(GAMETABLE_CSB); print(tolua.type(self.studio.layout))
C/C++與Lua之間進行資料函式互動以及解決“PANIC: unprotected error in call to Lua API (attempt t
在使用Cocos2d-x 時候,難免需要C/C++呼叫Lua函式、資料或Lua呼叫C/C++函式,那麼本篇講詳細介紹C/C++與Lua之間的資料、函式互動。 首先讓我們來簡單瞭解幾個Lua API函式: int luaL_dofile (lua_Sta
C/C++與lua互調函式的方法
1,在lua指令碼中呼叫C/C++程式碼中的函式 在C++中定義函式時必須以lua_State為引數, 以int為返回值才能被Lua所呼叫。 /* typedef int (*lua_CFunction) (lua_State*L); C 函式的型別。 為了正確的和 Lu
cocos2d-x學習筆記(c++與lua交互回調函數的處理)
回調函數 tolua++ cocos2dx lua 本文假設讀者已經會使用tolua++進行C++與lua之間的通訊1、在頭文件中定義註冊回調函數,定義在MyClass類中void register(unsigned short cmdID, LUA_FUNCTION func);//LUA_
c++ 與 lua 簡單交互參數介紹
nil mod 一次 toc clip main copyto 新的 world 原文http://blog.csdn.net/johnice/article/details/5517431 一、第一個例子 Hello World ! [c-sharp] v
C#與lua相互調用
.net 靜態 read ogr 資源 相互 tasks 1.5 .com Lua是一種很好的擴展性語言,Lua解釋器被設計成一個很容易嵌入到宿主程序的庫。LuaInterface則用於實現Lua和CLR的混合編程。 (一)C#調用Lua 測試環境:在VS2015中
[Visual Studio C++] [MFC] DDX(動態資料交換)和DDV(動態資料驗證)
DDX(動態資料交換)和DDV(動態資料驗證)是MFC中用於變數和控制元件間關聯資料和控制資料的巨集。 比如: DDX_Text(pDX,IDC_EDIT1,text); 就可以把變數text和控制元件IDC_EDIT1關聯起來,只要呼叫UpdateData(FALSE); 一旦text
C# GET/POST FLASK資料交換
C#端: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using
使用者空間與核心空間資料交換的方式(1)------debugfs
轉載自https://www.cnblogs.com/hoys/archive/2011/04/10/2011124.html 核心開發者經常需要向用戶空間應用輸出一些除錯資訊,在穩定的系統中可能根本不需要這些除錯資訊,但是在開發過程中,為了搞清楚核心的行為,除錯資訊非常必要,printk可能是
C++與Lua互動1: C++呼叫lua
lua作為一門動態語言,可用來當做配置檔案和實現經常變化的業務功能,很方便的實現熱更新。同時lua作為一門膠水語言,配合強大的C++作邏輯支撐,程式效能高、開發效率快,猶如珠簾合璧,所向無敵。C++與lua的互動主要通過lua的虛擬棧實現,本文不打算深入講解其
C/C++ 與lua混合使用入門講的比較好的文章
轉自 http://www.open-open.com/home/space-6246-do-blog-id-1426.html Lua是一個嵌入式的指令碼語言,它不僅可以單獨使用還能與其它語言混合呼叫。 Lua與其它指令碼語言相比,其突出優勢在於: 可擴充套件性。Lua的擴充套件性非常卓越
Unity3D 預備知識:C#與Lua相互呼叫
public class CSharpLuaTest : MonoBehaviour { private LuaState luaState = new LuaState(); // 建立lua虛擬機器 void Start () { //
linux0.11核心空間與使用者空間資料交換
學習linux到現在對於這個問題一直都沒有在意,細看程式碼時發現這確實是一個大問題,並且感覺很巧妙,具體在segment.h檔案中函式實現。 當用戶程序執行系統呼叫進入核心空間時,所有段都指向核心段,但是fs卻除外,它需要扮演負責核心空間與使用者空間資料的交換的重要角色。其
C++與Java基本資料型別比較
----------------C++----------- ------------Java---------- (01)bool------------------1 byte 01)boolea
1、在C#與Lua相互呼叫
一、利用LuaInterface呼叫lua程式碼 1、下載luainterface,這裡用的luainterface-1.5.3版本。 2、新增 LuaInterface.dll的引用。 3、利用直譯器進行呼叫 using System; using L
C與Lua互動之互動原理
lua作為指令碼語言,就是用來擴充套件宿主程式或者嵌入到宿主程式中的,這裡宿主程式使用C來講解下Lua與C互動的原理。在這之前先講下C語言是如何呼叫函式以及函式引數的。C函式和引數的呼叫我們都知道C語言的函式呼叫時通過函式呼叫棧實現的,當一個函式呼叫另一個函式時,會按照約定的
MFC的WebBrowser控制元件 C++與JavaScript之間資料互動傳遞
----------------------------------------------------------------------------------------------------------------------------------------
C#中初始化串列埠的函式定義與資料接收程式碼片段
// init serial port private void Init_SerialPort() { string s; serialPort1.Close();
資料結構,圖的鄰接矩陣建立,鄰接矩陣與鄰接表的交換,兩種表的輸出,過程用C++實現
/* 編寫一個程式algo8-1.cpp,實現不帶權圖和帶權圖的鄰接矩陣與鄰接表的互相 轉換演算法、輸出鄰接矩陣與鄰接表的演算法,並在此基礎上設計一個程式exp8-1.cpp 實現如下功能: 1)建立如圖有向圖G的鄰接矩陣,並輸出; 2)由有向圖G的鄰接矩陣產生鄰接表,並輸
Lua 與C/C++ 互動系列:通過C呼叫Lua函式(1)
1、Lua通過ANSI C 進行編寫,Lua與C互動要遵循一定的協議規則。在Lua 5.1 Reference Manual中明確規定如何通過C Code呼叫Lua 編寫的函式。 C code可以呼叫Lua Code編寫的任何函式.本文主要以全域性函式來做演示