「秀丸マクロ」のスコープと「hmLJ/LuaJIT」のスコープとの値のやり取り

  • 概要

    LuaJITの例題のひとつとなります。

    スコープ間の値のやりとり

    hmLJがLuaJITに付け加えている機能とは、まさにここになります。
    「秀丸マクロ」のスコープと「hmLJ/LuaJIT」のスコープとの値のやり取りをみてみましょう。

    Luaの配列はindexが「1」から始まるということに注意しましょう。

    #L = loaddll( hidemarudir + "\\" + "hmLJ.dll" );
    
    // テーブル{1,2,3}をbbbに代入
    #_ = dllfunc(#L, "DoString", "bbb = {1,2,3}\n");
    
    #_ = dllfunc(#L, "SetNumVar", "var1", 100);
    #num = dllfunc(#L, "GetNumVar", "var1");
    message(str(#num));
    
    #_ = dllfunc(#L, "DoString", "bbb[2] = var1\n" );
    
    // bbbの[2]をresult_numという変数に代入
    #_ = dllfunc(#L, "DoString", "result_num = bbb[2]" );
    
    // resultの数値を得る
    #result_num = dllfunc(#L, "GetNumVar", "result_num");
    
    // 表示
    message(str(#result_num));
    
    // LuaJITのスコープにグローバル変数nameとして「武田信玄」という文字列を代入
    #_ = dllfunc(#L, "SetStrVar", "name", "武田信玄");
    
    // 今設定した値を秀丸マクロ側に取得
    $name = dllfuncstr(#L, "GetStrVar", "name");
    message($name);
    
    // bbb[1]の値と-200の絶対値を足しこんで、result_numという変数に代入
    #_ = dllfunc(#L, "DoString", ""+
        "result_num = bbb[1] + math.abs(-200)\n"
    );
    
    // それを秀丸マクロ側に得る
    #result_num = dllfunc(#L, "GetNumVar", "result_num");
    
    // 文字列として表示
    message(str(#result_num));
    
    freedll(#L);