C#の中から秀丸マクロを文字列

概要

C#の中から秀丸マクロを文字列で実行可能です。
一部の制限はありますが、通常の運用では困ることはないでしょう。

C#の中から秀丸マクロを文字列で実行可能

マクロ実行中のみ実行可能

Hm.Macro.Eval("秀丸マクロの文字列");

類似のものですが、「マクロを実行していない時にのみ、実行可能」な関数としてHm.Macro.Exec.Eval(...)があるので注意してください。

  • C#側のソース

    MyTest.cs
    using System;
    using HmNetCOM;
    
    ....
        var result = Hm.Macro.Eval(@"
            message (""abc"");
        ");
    
        if (result.Result > 0)
        {
            return "成功";
        } else
        {
            return "失敗";
        }
    
    

    次のようにすれば簡易的に変数へと数値や文字列を代入できますが、
    このような実装方法は危険です。

    このような形で実装するのではなく、秀丸マクロ変数へと値を伝搬して( Hm.Macro.Var["..."] = *** )、かつ、 その変数を利用するようにしましょう。
    もしくは、Hm.Macro.Function や Hm.Macro.Statement を利用してください。

    MyTest.cs
        string cmd = @"
            #TMP_OUTPUT_PANE_DLL = loaddll(""HmOutputPane.dll"");
            #ret=dllfunc(#TMP_OUTPUT_PANE_DLL, ""Output"",hidemaruhandle(0), ""$message_tmp_hm_output_pane"" + ""\r\n"");
            freedll(#TMP_OUTPUT_PANE_DLL);
        ";
    
        cmd = cmd.Replace("$message_tmp_hm_output_pane", @"あいう\r\n♫go");
    
        var result = Hm.Macro.Eval(cmd);
        if (result.Result > 0)
        {
            return "成功";
        } else
        {
            return "失敗";
        }