1. 程式人生 > >C/C++與Lua之間進行資料函式互動以及解決“PANIC: unprotected error in call to Lua API (attempt t

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_State *L, const char *filename)  :

載入並執行指定檔案,沒有錯誤返回0

void  lua_settop (lua_State *L, int index):

引數允許傳入任何可接受的索引以及 0 。 它將把堆疊的棧頂設為這個索引。 如果新的棧頂比原來的大,超出部分的新元素將被填為 nil 。 如果 index 為 0 ,把棧上所有元素移除。

void   lua_getglobal (lua_State *L, const char *name):

把全域性變數 name 裡的值壓入堆疊。

void   lua_pop (lua_State *L, int n):

從堆疊中彈出 n 個元素。相當於清除!

void   lua_pushstring (lua_State *L, const char *s):

把指標 s 指向的以零結尾的字串壓棧。 Lua 對這個字串做一次記憶體拷貝(或是複用一個拷貝), 因此 s 處的記憶體在函式返回後,可以釋放掉或是重用於其它用途。 字串中不能包含有零字元;第一個碰到的零字元會認為是字串的結束。

瞭解了以上幾個函式,為了方便童鞋們使用,Himi直接貼出封裝好的類 HclcData,其中主要包括如下幾個功能:

1. C/C++ 呼叫 Lua 全域性變數

2. C/C++ 呼叫 Lua 全域性Table 某元素

3. C/C++ 呼叫 Lua 全域性Table

4. C/C++ 呼叫 Lua 函式

5. Lua 呼叫C/C++ 函式

下面直接貼出程式碼:HclcData.h

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 // //  HclcData.h //  CppLua // //  Created by Himi on 13-4-17. //

相關推薦

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語言組合語言之間函式呼叫

教材:嵌入式系統及應用,羅蕾、李允、陳麗蓉等,電子工業出版社 ARM 程式設計 C與彙編之間的函式呼叫 ATPCS簡介 ARM-Thumb 過程呼叫標準 ATPC

c++類物件之預設成員函式

c++類與物件(二) 1.類的6個預設成員函式 一:建構函式 建構函式是一個特殊的成員函式,名字與類名相同,建立類型別物件時由編譯器自動呼叫,保證每個資料成員都有一個合適的初始值,並且在物件的生命週期內只調用一次。 建構函式是特殊的成員函式,其特徵如下:

C#字串數值之間的轉化

1、十進位制字串轉化為十進位制數        Convert.ToInt32(str);      要確保str是十進位制字元 2、十進位制數轉化字串       變數名後面直接加  .ToStri

深入淺出 C++:程式終止相關的函式 PART 3

Markdown 編輯器真是不好用,這個文章裡,好幾個程式輸出的地方,# 開頭的都被識別成標題了。如果在 # 前面加上 \,看起來似乎能解決,但好幾行一改,又變成能在文章內看到 \ # 開頭了。哎,試了半個小時,懶得再試了,客官們擔待些,反正對理解正文沒影響便是

C語言java語言中資料型別的差別總結

在學習java的時候,看到char ch =  '男' ;我就覺得很奇怪,char型別不是佔用一個位元組嗎?為什麼定義成一個漢字被說成是一個字元了?原來,在C語言中,char在32位作業系統下佔用1個位

深入淺出 C++:程式終止相關的函式 PART 1

C/C++ 程式,一般是藉由 main() 的返回值呼叫 exit() 函式以正常結束程式。除了程式崩潰、或使用者強制結束程式外,C++ 亦提供數個函式,允許呼叫以立即終止程式,本文將一一介紹這些函式。 不過,在進入主題前,需提醒讀者:撰寫程式時,儘可能使程式

深入淺出 C++:程式終止相關的函式 PART 2

quick_exit() 與 at_quick_exit() (C++11新增) [[noreturn]] void quick_exit(int status) noexcept; quick_exit() 為 C++11 引入的函式,如果程式有特殊理

邏輯是生物在進行思考的時候,用來在所思考的事物事物之間進行聯系的方法

邏輯與 事件 多少 不同的 之間 獲得 方法 為我 當我 我認為邏輯並無對錯或有無之分,只有使用者的多少之分。 如果一定要定義,我會說:邏輯是生物在進行思考的時候,用來在所思考的事物與事物之間進行聯系的方法。你可以用多種方法聯系事物,沒有哪一種是錯的。只不過當別人和你所用的

幾張圖為你分析HTML、JSPHP之間資料傳輸

在電商網站搭建過程中,前端經常會向後端請求資料,有時候通過HTML、JS和PHP檔案的處理來實現資料的連通。通常情況下,使用者在HTML中做關鍵字操作,JS對提交的表單進行資料處理,向後端發起ajax請求對應PHP的api介面,PHP在接收到資料後對連線伺服器,伺服器再通過PHP中的SQL語句對資料

Android頁面之間進行資料回傳

要求:頁面1跳轉到頁面2,頁面2再返回頁面1同時返回資料 頁面1新增如下程式碼:  Intent intent = new Intent(this,Activity02.class);       Bundle bundle = new Bun

Activity DialogFragment 之間資料傳遞

這篇文章參考了網友的相關資料(因為參考了多名前輩的資料,這裡就不一一指明出處了),不過還是非常感謝前輩們的無私分享。此文僅是學習過後的總結,主要目的是以後自己看著方便,如果恰巧能幫到你那也是再好不過了。(文中程式碼並不全,只是概括了思路,是從我目前的專案中拆下來的) Activity

FragmentActivity之間資料互動

一、Activity把值傳遞給Fragment    建議的傳值方式是通過Bundle來傳遞,而不是直接作為fragment的構造引數傳遞。在activity中建立bundle資料包,並呼叫fragment的setArguments(Bundle bundle)方法,即可將

如何用mybatis資料庫之間進行互動

如何使用Mybatis連線數庫 簡介   使用Mybatis連線資料庫,使用Mybatis 建立一個工作空間,建立工程 一、  配置環境 1、      開啟工程pom.xml配置檔案,配置資訊 如下 2、 

Android實現FragmentActivity之間資料互動

1概念 1 為什麼 因為Fragment和Activity一樣是具有生命週期,不是一般的bean通過建構函式傳值,會造成異常。 2 參考連結 Activity和Fragment傳遞資料的兩種方式 【Fragment精深系列4】Frag

windowslinux之間共享資料夾訪問

一、安裝環境 本機系統:Windows 7 旗艦版 VMware:VMware Workstation 9.0 CentOS:CentOS 5.10 網路介面卡設定為:NAT 轉換 二、檢視是否已經安裝“samba” 命令:rpm -qa|grep samba 輸出結果:

使用WinSCP在VirtualBoxWindows之間進行檔案傳輸

    第一次寫部落格表示很激動。完成Linux作業用的時間還比較少,但是為了在兩種作業系統下傳輸檔案,我耗費了整整一個下午的時間。雖然百度上在介紹WinSCP的使用時,講起來非常簡單(不夠詳細),但在我自己用的時候真是問題重重,幾乎把所有可能遇到的問題都遇到了,現在把它分享

hivees之間實現資料互動

1、環境描述: hadoop叢集環境:hadoop-2.6.0;3臺叢集環境 hbase叢集環境:habase-1.1.2 ;3臺叢集環境 hive環境:hive-1.2.1;1臺測試環境 elasticsearch:elasticsearch-1.7.1測試環境 2、下載

微信小程式之前端java後臺進行資料互動

最近小程式挺火的,準備寫個小程式試試,我會將我遇到的問題和我認為有用的記錄下來,但是隻瞭解java,並不太懂PHP,雖然說語言都是相通的(我也不知道誰說的),反正還是用Java寫後臺吧,1.申請伺服器+域名3.準備使用ssm框架進行後臺開發,先進行前端後臺資料互動試試後臺ja

jspservlet之間資料傳遞

1.如果要從servlet把物件傳到jsp,那麼這個物件的成員變數都要實現set/get函式; 2.如果要從servlet與jsp之間傳遞陣列型別(list..vector.),那麼應該用session來實現; 3.還沒發現直接把jsp上多個同名的checkbox的字元