hmLNの基礎中の基礎のAPI

概要

秀丸マクロから呼び出すhmLNの関数(API)は多くありません。

ほとんどの場合は、「DoString」だけを使うこととなるでしょう。

Luaファイルを別ファイルにした場合には、「DoFile」を使うことになるハズです。

  • 命令の実行:
     └ DoString(szexpression)

    文字列「szexpression」をLuaの命令として実行します。

    何らかの明確な内部エラーがあった場合は0が、とりあえず実行できた場合は1が返ってきます。

    • 1つのマクロ内で「DoString」は複数回実行可能、変数空間も同じ
      #LUA = loaddll( hidemarudir + @"\hmLN.dll" );
      
      #_ = dllfuncw( #LUA, "DoString", R"LUA(
      
        aaa = "あいうお";
      
        function mysum(a, b)
          return a + b
        end
      
      )LUA"
      );
      
      
      #bbb = 123;
      
      #_ = dllfuncw( #LUA, "DoString", R"LUA(
        bbb = hm.Macro.Var['#bbb'];
        ccc = aaa .. "続いている"; -- 別のDoStringでも、aaa は引き続き利用できる。
      
        hm.Macro.Var['$ddd'] = ccc;
      
        hm.debuginfo( mysum(1,2) ); -- 別のDoStringで定義した関数も当然利用できる。
      
      )LUA"
      );
      
      message($ddd);
      
      freedll( #LUA );
      



  • 命令の実行:
     └ DoFile(filename)

    ファイル名「filename」内の記述内容全体をDoString(...)の引数に渡したものとして実行します。

    何らかの明確な内部エラーがあった場合は0が、とりあえず実行できた場合は1が返ってきます。

    • 1つのマクロ内で「DoFile」は複数回実行可能、変数空間も同じ

      繰り返しになりますが、DoFileとは、「該当のファイルの中身をそのままDoStringに渡す」ということですので、
      複数子のファイルを利用することが可能です。
      この際は、変数名の衝突などに注意してください。



  • .luaファイルの文字コードの変更など:
     └ SetCodePage(codepage)

    「.lua」ファイルは、「utf8(BOM無)」「utf8(BOM有)」「utf16(BOM有)」のいずれかが想定されています。
    それ以外で取り扱いたい場合、「SetCodePage」関数を利用してください。
    この関数は「読み込み対象のファイル」が、該当のコードで記述してある、 という指定となります。

    • 秀丸マクロ側の記述

      例えば、以下のようにすることで、

      • 読み込み対象の.luaファイルはcp932(shift-jis)で記述してあるということになります。
      • 932:ShiftJIS(=cp932), 1200(utf16), 65001(utf8)となります。

      基本的にまともに取り扱うことが出来る文字コードには、必ず「コードページ」が割り振られているため、あらゆるものに対応できます。

      #LUA = loaddll( hidemarudir + @"\hmLN.dll" );
      
      // 読み込み対象のファイルである「.rbファイル」は指定のコードページで書かれてます(932=cp932≒ShiftJIS)ですよ、という指定
      #_ = dllfuncw(#LUA, "SetCodePage", 932 );
      
      #_ = dllfuncw(#LUA, "DoFile", currentmacrodirectory + @"\test.lua" );
      
      freedll(#LUA);
      
    • NeoLua側の記述
      test.lua
      hm.debuginfo("テストテスト");