入門編 ~秀丸マクロ上の静的な変数の値を読み取る・書き換える~ (秀丸エディタ 9.15以降)

概要

hm.NETでは秀丸マクロの「静的な変数」を常時読み書きすることが出来ます。
秀丸マクロの「静的な変数」とは、秀丸マクロでいうところの setstaticvariable 文getstaticvariable 関数 で対象となっている変数に相当します。)

秀丸マクロ上の静的な変数の値を読み取る・書き換える

マクロ実行中のみ、読み取り・書き換え可能

string Hm.Macro.StaticVar.Get( string key, int sharedflag )
bool Hm.Macro.StaticVar.Set( string key, string value, int sharedflag )
共用メモリのタイプを表す最後の引数 上述の getstaticvariable や setstaticvariable の解説を見ればわかりますが、
最後の引数に -1 を指定することで、「該当のプロセスのみ」「マクロ実行中のみ」という変数のライフサイクルとなる一方で、
該当の静的変数はメモリ制限のない状態に出来ます。
(静的変数は32767個までという制限はある)
(厳密にはWindowsのアプケーションとしてのメモリ制限は受けます)
  • C#側のソース

    ClassLibrary20.cs
    using System;
    using Hidemaru;
    
    namespace ClassLibrary20
    {
        public class Class1
        {
            public static String test()
            {
                // 秀丸エディタ9.15未満のバージョンでは秀丸側に対応する関数が存在せず、例外が発生する。
                try
                {
                    bool b = Hm.Macro.StaticVar.Set("hoge", "あいうえお", -1);
                    string ret = Hm.Macro.StaticVar.Get("hoge", -1);
                    return ret;
                }
                catch (Exception e)
                {
                    Hm.OutputPane.Output(e.Message);
                }
                return "";
            }
        }
    }
    
  • 秀丸マクロ側のソース

    HmClassTest.macなどと適当に名前を付ける
    #HMNET = loaddll( hidemarudir + @"\hm.NET.dll" );
     
    if ( !#HMNET ) { message "hm.NET.dllが読み込めない"; }
     
    $result1 = dllfuncstrw( #HMNET, "CallMethod", currentmacrodirectory + @"\ClassLibrary20.dll", "ClassLibrary20.Class1", "test" );
    message getstaticvariable("hoge", -1);
    message($result1);
    
  • C#側のソース

    string Hm.Macro.StaticVar[ string key, int sharedflag ]
    void Hm.Macro.StaticVar[string key, int sharedflag ] = value
    StaticVar[varname, sharedscope]という形も可能
    Hm.Macro.StaticVar["hoge", -1] = "あいうえお";
    string ret = Hm.Macro.StaticVar["hoge", -1];