C++の中から秀丸マクロを文字列で実行可能です。 一部の制限はありますが、通常の運用では困ることはないでしょう。
マクロ実行中のみ実行可能
decltype(Hm.Macro)::IResult Hm.Macro.doEval(wstring expression);
類似のものですが、「マクロを実行していない時にのみ、実行可能」な関数としてHm.Macro.Exec.dEval(...)があるので注意してください。
#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; }