hmLJの応用のAPI

  • 概要

    hmLJ自体が備えている残りのAPIは9つです。

    全ては「リスト」と「ディクショナリ」の値の取得・設定に関するものとなります。

    似たような関数ですが、概念としてはたった1しかありません。

    変数名 [ キー名 ]
    

    このような添え字でアクセスできるオブジェクトの値を「取得」「設定」する関数です。

    これらは無理に覚える必要はありませんが、

    #_ = dllfunc( #L, "DoString", "aaa = {1,2,3,4,5,6}" );  // 配列を定義
    #_ = dllfunc( #L, "SetNumVar", "tmpnum", 100 ); // 一旦tmpnumというグローバル変数に値を設定
    #_ = dllfunc( #L, "DoString", "aaa[3] = tmpstr" ); // aaa[3]に値を設定
    

    と記述するところを

    #_ = dllfunc( #L, "DoString", "aaa = {1,2,3,4,5,6}" );  // 配列を定義
    
    // aaaの添え字[3]に100を代入
    #_ = dllfunc( #L, "SetNumItemOfList", "aaa", 3, 100 );
    

    と記述できるということになります。
    知っておくと記述が少し楽になるでしょう。

    以下のListやDict系の関数はhmPyと同じ名前の関数となります。

  • リストにアクセスする4つの関数(***OfList)

    厳密には「リスト」だけではなく、「タプル」や「独自に自分で定義したオブジェクト」も含め、
    「整数の添え字」でアクセス可能なモノ」全てが含まれます。

    • 「添え字は整数タイプ」・「アイテムは数値の値」を得る:
       └ GetNumItemOfList(list_name, index)

      aaa[3] の値を得るといった場合です。aaa[3]の中身が数値タイプだとわかっている場合に利用します。


    • 「添え字は整数タイプ」・「アイテムは数値の値」を設定:
       └ SetNumItemOfList(list_name, index, value)

      aaa[3] = 10 のように値を設定したいといった場合です。


    • 「添え字は整数タイプ」・「アイテムは文字列」として得る:
       └ GetStrItemOfList(list_name, index)

      aaa[3] の値を得るといった場合です。aaa[3]の中身を「文字列」に変換して取得する場合に利用します。


    • 「添え字は整数タイプ」・「アイテムは文字列の値」を設定:
       └ SetStrItemOfList(list_name, index, value)

      aaa[3] = "aaa" のように文字列の値を設定したいといった場合です。


  • ディクショナリにアクセスする4つの関数(***OfDict)

    厳密には「ディクショナリ」だけではなく、「独自に自分で定義したオブジェクト」も含め、
    「文字列の添え字」でアクセス可能なモノ」全てが含まれます。

    • 「添え字は文字列タイプ」・「アイテムは数値の値」を得る:
       └ GetNumItemOfDict(list_name, key)

      aaa["prop"] の値を得るといった場合です。aaa["prop"]の中身が数値タイプだとわかっている場合に利用します。


    • 「添え字は文字列タイプ」・「アイテムは数値の値」を設定:
       └ SetNumItemOfDict(list_name, key, value)

      aaa["prop"] = 10 のように値を設定したいといった場合です。


    • 「添え字は文字列タイプ」・「アイテムは文字列」として得る:
       └ GetStrItemOfDict(list_name, key)

      aaa["prop"] の値を得るといった場合です。aaa["prop"]の中身を「文字列」に変換して取得する場合に利用します。


    • 「添え字は文字列タイプ」・「アイテムは文字列の値」を設定:
       └ SetStrItemOfDict(list_name, key, value)

      aaa["prop"] = "aaa" のように文字列の値を設定したいといった場合です。


  • hmLJに特別に用意されている関数

    • 「配列タイプのテーブルの長さ」を得る:
       └ GetLenOfList(list_name)

      luaの #list に相当する値を取得します。

      Luaの場合、「テーブル」機能に様々な実装を集約する傾向が高くなる言語ですので、
      必然的にテーブルの配列数を秀丸マクロとやり取りする機会が増えます。
      そこで、GetLenOfList というテーブルの長さ「#list」に相当する関数が追加されています。

    • Dll解放時に呼びされる関数:
       └ DestroyScope()

      Luaでは、並列処理やwin32apiを経由したウィンドウ表示も可能となっていますので、
      Luaで処理中に秀丸を不意に閉じるといったことが可能です。
      そこで、Dllの解放時に逆に呼び出される関数として、「DestroyScope」を用意しています。
      DestroyScopeが関数が定義されていると、呼び出されます。

      #L = loaddll( hidemarudir + "\\hmLJ.dll");
      
      #_ = dllfunc(#L, "DoString", "" +
      "function DestroyScope()\n" +
      "    hm.debuginfo('DLLが解放される直前')\n" +
      "end\n"
      );
      
      freedll(#L);