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

概要

hm.NetCOMでは秀丸マクロで定義されている変数(秀丸マクロからあらかじめ提供されているもの、
ユーザーが独自に定義したもののどちらでも)を取得、 値を書き換えることが出来ます。
(※秀丸があらかじめ提供している読み取り専用のシンボルの値は書き換えることが出来ません)

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

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

THmNumver|wstring Hm.Macro.getVar<THmNumver|wstring>(wstring varname)
THmMacroVariable Hm.Macro.getVar(wstring varname)
bool Hm.Macro.setVar(wstring varname, THmMacroVariable value)
  • C++側のソース

    dllmain.cpp
    #include "HmCppInvoke.h"
    
    using namespace Hidemaru;
    using namespace std;
    
    extern "C" __declspec(dllexport) THmNumber test() {
        Hm.funcDllExport();
    
        try {
            auto fn1 = Hm.Edit.getFilePath();
            Hm.OutputPane.output(fn1);
    
            auto fn2 = Hm.Macro.getVar<wstring>(L"filename2");
            Hm.OutputPane.output(fn2);
    
            Hm.Macro.setVar(L"$bbdd", L"文字列変数への代入");
            Hm.Macro.setVar(L"#ccef", -33);
    
            // 秀丸マクロの数値の変数を取得
            auto column = Hm.Macro.getVar<THmNumber>(L"column");
    
            auto ccef = Hm.Macro.getVar<THmNumber>(L"#ccef");
            Hm.OutputPane.output(to_wstring(ccef) + L"\r\n");
    
            auto bbdd = Hm.Macro.getVar<wstring>(L"$bbdd");
            Hm.OutputPane.output(bbdd + L"\r\n");
    
            // 下記のようにテンプレートの型を指定しない方法もあるがあまり使うことはないだろう。
            auto vari = Hm.Macro.getVar(L"date");
            auto strdate = std::get<wstring>(vari);
    
            // これは数値型を文字列型と誤ったキャストエラーとなるので、catch 節に行く
            auto lineno = Hm.Macro.getVar<wstring>(L"lineno");
            Hm.OutputPane.output(lineno + L"\r\n");
    
        } catch (exception e) {
            Hm.OutputPane.output(Text::Encoding::utf8_to_utf16(e.what()));
        }
    
        return 1;
    }
    

    誤ったキャストを指定すると、例外が発生してしまいます。