この機能を利用する場合、秀丸エディタ v8.98 (正式版 or β9以上)を強く推奨します。
そうでない場合、数値と文字列の型を間違えて実行すると秀丸が不正な状態となります。
Hm.Macro.doEval(...)を「命令向けに特化」したものとして、「Hm.Macro.doStatement」が用意されています。
秀丸マクロにおいて「(関数のような)文」や「(関数のような)命令文」とは
moveto X座標, Y座標
のように呼び出しに「( )」が使われず、かつ、返り値を受け取らないものです。
一方、文と類似ですが「返り値」があり、「( )」を付けて呼び出すものを「関数」としています。
マクロ実行中のみ実行可能
decltype(Hm.Macro)::IStatementResult Hm.Macro.doStatement(wstring statement_name, ...ステートメントの引数);
秀丸マクロの文や関数にはごく一部には「menuarray」など 引数として「配列」を必要とするものがあります。
今回は「秀丸マクロ文のmenuarray」を利用してみましょう。
setVar(...)、getVar(...)、doEval(...) などを組み合わせ、自分でラップしてC++上に menuarray 関数を作成しまえばよいでしょう。
実行した秀丸マクロ文が無事成功したなら「秀丸マクロのresult相当の値が」、失敗したなら「0」以下がint型で入っています。
0とは限らないので注意してください。
ステートメントの実行そのものが成功したのかはgetResult()ではなくgetException()で拾ってください。
getResult()では実行に成功した結果、マイナスのresult値が返ってきていることもあり得ます。
秀丸マク関数を実行した後、秀丸マクロ関数に渡した引数が最終的にどういった値になったかを取得できます。
vector<THmMacroObject>型で、関数に渡した最初の引数が[0], 次の引数が[1], ... といった形で格納されています。
各種リスト要素はTHmMacroObject型になっていますので、取得するにはstd::get<THmNumver|wstring>での取得が必要です。
何か明確な例外が発生した場合はexception型の例外インスタンスが入っています。
例外が入っていない場合は、std::nullopt が入っっている。
基本的には特になにもはいっておらず、空文字が入っています。