最終更新日 2024-09-25

~秀丸マクロを「関数」を文字列で実行~

概要

この機能を利用する場合、秀丸エディタ v8.98 (正式版 or β9以上)を強く推奨します。
そうでない場合、数値と文字列の型を間違えて実行すると秀丸が不正な状態となります。

Hm.Macro.doEval(...)を「関数向けに特化」したものとして、「Hm.Macro.doFunction」が用意されています。

秀丸マクロにおいて「関数」とは

$ret = sprintf(....);

のように呼び出しに「( )」を利用し、返り値を受け取る形になっているものです。

一方、類似ですが関数のようでいて「返り値」がなく、「( )」もないものは秀丸マクロでは「文」もしくは「命令文」としています。

秀丸マクロの関数を実行可能です。

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

Hm.Macro.doFunction(wstring func_name, ...関数の引数);

引数が書き換わる関数

C++の型に対する支援を期待するのなら、そのままHm.Macro.doFunction...と利用するよりも、
ラップするのがおすすめです。
また、秀丸マクロの関数にはごく一部、返り値のみならず、引数に渡している変数自体に値が入ってくるものもあります。
例えばgetlinecount (秀丸v8.94以降)enumregvalue (秀丸v9.00以降)などが該当します。
こういったものも取得できるようになっています。

今回は「秀丸マクロ関数のgetlinecount」をラップしてみましょう。

Hm.Macro.doFunction(...) の返り値

返り値が不明な関数はうまくいかない

秀丸マクロの関数にはCOMなどで利用する「member関数」など、
ごく一部「関数だけではその返り値が数値なのか文字列なのか区別が付かないものがあります。
こういった関数は、うまくいきません。
これらは、Hm.Macro.doEval(...)、getVar、setVar、などを利用してラップしましょう。