hmRbの基礎中の基礎のAPI

  • 概要

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

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

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

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

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

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

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



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

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

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

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

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



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

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

      • 秀丸マクロ側の記述

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

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

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

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