LuaとC#の呼び出し

3959 ワード

LuaInterfaceとは
LuaInterfaceは2つのコアライブラリを含み、1つはluaInterfaceである.一つはルアネットdll、LuaInterfaceでLuaとC#(CLR)間の相互呼び出しを完了できます.
 
プロジェクトを新規作成した後、圧縮パッケージのLUAInterface.dllとluanet.dll C#新規アイテムにドラッグ&ドロップし、参照にluainterfaceの参照を追加
C#でのアクセスLuaコードの実行
    Lua lua = new Lua();//Lua解析器の作成
    lua["num"]=2;//numを定義する
    lua["str"]="a string";//文字列の定義
    lua.newTable("tab");//テーブルtab={}の作成
 
lua環境での変数の取得
   doublenum = (double)lua["num"];
   string str = (string)lua["str"];
 
C#でLuaスクリプトファイル、またはスクリプト文字列を実行
   lua.DoFile("script.lua");//scriptを実行します.luaスクリプト.スクリプトはC#エンジニアリングと同じディレクトリの下で、luaコードフォーマットはansiフォーマットです.フォルダはC#プロジェクトの下のdebuフォルダに入れます
   lua.DoString("num=2");
   lua.DoString("str='a string'");
   object[] retVals = lua.DoString("return num,str");
   
ホットアップデートでは、luaスクリプトを解析するコードを書くだけで、c#コードは変更する必要はなく、luaスクリプトを修正するだけでいいので、luaスクリプトでゲームロジックを制御します.
 
CLRでC#メソッドをLuaに登録する
//クラス内の一般的なメソッドを登録する
1番目のパラメータはl変換後のluaのメソッド名で、2番目はC#のクラス名で、3番目はC#のメソッド名です.
Lua lua = new Lua(); 
Program p=new Program(); 
lua.RegisterFunction("LuaMethod", p, p.GetType().GetMethod("CLRMethod")); 
lua.DoString("LuaMethod()"); 
Console.ReadKey(); 

public void CLRMethod() 
{             
   Console.WriteLine(" C#      LUA");
}

   
//クラスの静的メソッドを登録する
 Lua lua = new Lua();
            lua.RegisterFunction("CToLua", null, typeof(Program).GetMethod("MyStaticMethod"));
            lua.DoString("CToLua()");
            Console.ReadKey();
 public static void MyStaticMethod()
        {
            Console.WriteLine(" C#        lua");
        }

 
Luaエディタでc#のクラスを使用する
require"luanet"はライブラリに導入され、ライブラリ内のメソッドを使用することができます.
--CLRのタイプをロードし、CLRオブジェクトをインスタンス化する
Luaのコード、luaはC#のクラスluainterfaceを呼び出します.exe    luanet.exeインポートプロジェクトのdebugフォルダの下
require "luanet"
luanet.load_assembly("System")//     
num=luanet.import_type("System.Int32")//    
print(num) 

C#の中のコード、C#はluaの方法の出力を呼び出します;
  Lua lua = new Lua();
            lua.DoFile("LuaUseScript.lua");
            Console.ReadKey(); 

 
LuaでC#のクラスを使用してオブジェクトを作成すると、最適な構造方法が自動的に一致します.
 
LuaでのC#へのアクセスのプロパティとメソッド
Luaコードでは、C#オブジェクトの属性にアクセスする方法は、objのようにtableのキーインデックスにアクセスするのと同じである.nameまたはobj["name"]
Luaコードでは、C#オブジェクトの一般的な関数にアクセスする方法は、obj:method 1()などのtableを呼び出す関数と同じです.
luanet.load_assembly("lelelua")
Program=luanet.import_type("lelelua.Program")
program1=Program()
print(program1.name)
program1:TestMethod() 
  public string name = "     ";
        public void TestMethod()
        {
            Console.WriteLine("C#    ");
        }

LuaでC#にアクセスする方法-特殊な場合、戻り値が2つあることに注意してください.
luanet.load_assembly("lelelua")
Program=luanet.import_type("lelelua.Program")
program1=Program()
void,strlength=program1:TestOut("leleaixuexi")
print(strlength) 
   public void TestOut(string name, out int count)
   {
      count = name.Length;
   }

関数にoutまたはrefパラメータがある場合、outパラメータはrefパラメータと関数の戻り値とともに返され、呼び出された場合、outパラメータは入力する必要はありません.
refパラメータは入力する必要があり、1つのtableに2つの値(value 1,value 2)が返されます.
リロード関数がある場合、呼び出し関数は最初に一致する関数と自動的に一致します.
get_を使用できますmethod_bysig関数C#で指定されたクラスの指定パラメータを得る関数の使い方
   luaMethod= get_method_bysig(Obj,"CSharpMethod","System.String")
           luaMethod("siki")
 
LuaにC#のイベント依頼を登録する(event delegate)
LuaでAddメソッドまたはRemoveメソッドを使用してLuaの関数を登録またはC#からのイベント依頼からログアウトします.
     function method()
     end
     obj.SomeEvent:Add(methodname(引用符なし)