欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C#和lua如何相互調(diào)用-創(chuàng)新互聯(lián)

小編給大家分享一下C#和lua如何相互調(diào)用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)建站專注于企業(yè)全網(wǎng)營(yíng)銷推廣、網(wǎng)站重做改版、平城網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁(yè)面制作成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為平城等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

Lua是一種很好的擴(kuò)展性語言,Lua解釋器被設(shè)計(jì)成一個(gè)很容易嵌入到宿主程序的庫(kù)。LuaInterface則用于實(shí)現(xiàn)Lua和CLR的混合編程。

C與lua交互面臨以下幾個(gè)問題:

1、由于lua里面的數(shù)據(jù)都是動(dòng)態(tài)加載的所以內(nèi)存也是動(dòng)態(tài)分配的,也沒有static 這樣的修飾,而C里面有 static const 這樣的靜態(tài)類型數(shù)據(jù)

2、c里面是手動(dòng)管理內(nèi)存lua 里面是自動(dòng)管理內(nèi)存

所以為了解決這些問題就采用了一個(gè)抽象棧來讓lua與c交換值,好比c里面的 void*  可以指向任何地址而不用管存儲(chǔ)類型。這樣兩邊都不管你傳的何種類型的參數(shù),只用知道它是一個(gè)地址指針。兩邊用的時(shí)候再?gòu)?qiáng)制轉(zhuǎn)換成對(duì)應(yīng)的類型。

下面開始本文的正文吧。

(一)C#調(diào)用Lua

測(cè)試環(huán)境:在VS2015中建一個(gè)C#控制臺(tái)應(yīng)用程序,并添加LuaInterface.dll的引用

LuaInterface下載地址:http://luaforge.net/projects/luainterface/(下載luainterface-1.5.3,這里面的資源比較多)

LuaInterface.Lua類是CLR訪問Lua解釋器的主要接口,一個(gè)LuaInterface.Lua類對(duì)象就代表了一個(gè)Lua解釋器(或Lua執(zhí)行環(huán)境),Lua解釋器可以同時(shí)存在多個(gè),并且它們之間是完全相互獨(dú)立的。

簡(jiǎn)單說明下步驟:

C#和lua如何相互調(diào)用

在根目錄處添加LuaInterface.dll的引用:

C#和lua如何相互調(diào)用

  C#和lua如何相互調(diào)用

  C#和lua如何相互調(diào)用

不啰嗦、直接上代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LuaInterface;

namespace CSharpToLua
{
  class Program
  {
    static void Main(string[] args)
    {
      // 新建一個(gè)Lua解釋器,每一個(gè)Lua實(shí)例都相互獨(dú)立, 一個(gè)global全局域
      Lua lua = new Lua();

      //---------------------------------------------------
      // Lua的索引操作[]可以創(chuàng)建、訪問、修改global域
      lua["age"] = 20;
      lua["name"] = "Mr.huang";

      string luaCode = "print(\"This is Lua code\")";
      lua.DoString(luaCode);//執(zhí)行l(wèi)ua腳本代碼
        lua.DoFile("F:\\CSharpToLua\\CSharpToLua\\ScriptsFromFile.lua");//執(zhí)行l(wèi)ua腳本文件,這里我直接用了絕對(duì)定位

      double age = (double)lua["age"];

      Console.WriteLine("age = {0}", age);
      Console.WriteLine("width = {0}", lua["width"]);
      Console.ReadKey();
    }
  }

}

可以跟著敲一遍,提高與代碼的親密度 ~.~ And then 點(diǎn)擊啟動(dòng)

咦、這時(shí)會(huì)出現(xiàn)一個(gè)報(bào)錯(cuò)、但是不要緊、

C#和lua如何相互調(diào)用

解決方案:

  C#和lua如何相互調(diào)用

再次運(yùn)行、就可以看到結(jié)果啦、驚不驚喜、意不意外

C#和lua如何相互調(diào)用

簡(jiǎn)單的介紹C#如何調(diào)用Lua代碼、當(dāng)然、還有很多豐富的API小伙伴們可以自行查閱喲。

(二)Lua調(diào)用C#

直接上代碼 ~.~

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LuaInterface;

namespace CSharpToLua
{
  class Program
  {
    static void Main(string[] args)
    {
      // 新建一個(gè)Lua解釋器,每一個(gè)Lua實(shí)例都相互獨(dú)立, 一個(gè)global全局域
      Lua lua = new Lua();


      //---------------------------------------------------lua調(diào)用c#函數(shù)
      TestClass obj = new TestClass();

      // 注冊(cè)CLR對(duì)象方法到Lua,供Lua調(diào)用  typeof(TestClass).GetMethod("TestPrint")
      lua.RegisterFunction("TestPrint", obj, obj.GetType().GetMethod("TestPrint"));

      // 注冊(cè)CLR靜態(tài)方法到Lua,供Lua調(diào)用
      lua.RegisterFunction("TestStaticPrint", null, typeof(TestClass).GetMethod("TestStaticPrint"));

      lua.DoString("TestPrint(10)");
      lua.DoString("TestStaticPrint()");

      Console.ReadKey();
    }
  }

  class TestClass
  {
    private int value = 0;

    public void TestPrint(int num)
    {
      value = num;
      Console.WriteLine("CSharp"+value);
    }

    public static void TestStaticPrint()
    {
      Console.WriteLine("TestStaticPrint");
    }
  }
}

點(diǎn)擊運(yùn)行.................

  C#和lua如何相互調(diào)用

perfect~.~ 當(dāng)然、這里只是簡(jiǎn)單的介紹C#與Lua是如何相互調(diào)用的、小伙伴可自行Google大量豐富的API方便開發(fā)喲

重要的事要說三遍:LuaInterface是主要接口、LuaInterface是主要接口、LuaInterface是主要接口

以上是“C#和lua如何相互調(diào)用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站名稱:C#和lua如何相互調(diào)用-創(chuàng)新互聯(lián)
文章鏈接:http://www.chinadenli.net/article44/dosihe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)App設(shè)計(jì)網(wǎng)站收錄用戶體驗(yàn)云服務(wù)器網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

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

h5響應(yīng)式網(wǎng)站建設(shè)