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

概要

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

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

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

decltype(Hm.Macro)::IResult Hm.Macro.doEval(wstring expression);

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

  • C++側のソース

    dllmain.cpp
    #include "HmCppInvoke.h"
    
    using namespace Hidemaru;
    using namespace std;
    
    extern "C" __declspec(dllexport) THmNumber test() {
        Hm.funcDllExport();
    
        try {
            auto result = Hm.Macro.doEval(LR"MACRO(
                message("abc");
            )MACRO");
    
            // 失敗した場合は、getResult()は0以下となる。必ずしも0と等しいわけではないので注意。
            if (result.getResult() > 0)
            {
                // 成功
            }
            else
            {
                // 失敗
            }
    
            // 以下の方法で判定するのが自然かもしれない。
            if (result.getException() == nullopt) {
                Hm.OutputPane.output(L"成功");
            }
            else {
                Hm.OutputPane.output(L"失敗");
            }
    
            // nullopt は 偽値として認識するので、以下でも良い。
            if (! result.getException()) {
                Hm.OutputPane.output(L"成功");
            }
            else {
                Hm.OutputPane.output(L"失敗");
            }
    
        }
        catch (exception e) {
            Hm.OutputPane.output(Text::Encoding::utf8_to_utf16(e.what()));
        }
    
        return 1;
    }