|
>あるいはHidemaru_GetStaticVariableのようなものがあれば、setstaticvariableし
>たものを取得できて、仕様も文字列固定でシンプルでいいかもしれません。
静的変数(内部実装としては共用メモリだとは思いますが)、秀丸のデフォルトだと
制限が大きいので
その上に乗せて汎用目的のAPIをラップして作っていくというのは敬遠してしまうの
ではないかと思います。
理由としては
・通常のマクロ変数なら実行の度に(たとえ実行中断などによる形になっても)確保
されたマクロ変数はクリアされるのに対して、
静的変数はクリアされません(クリアされないことが存在意義でもありますが)。
マクロが終わるとクリアするオプションはありますがクリアされないものと同じ部
屋の中という制限を受けることにはなります。
他者マクロのクリアミス、あるいは静的変数への一時確保したものを実行中断など
が原因で未クリアなままにされているなど、
どんどん蓄積ゴミがたまり、やがて上限に達して(原因があるとも思えないような
段階で)実行不可能になる可能性があります。
(64のデフォルトだと未クリアだとけっこうあえなく上限になることでしょう)
・静的変数の上限は設定で大きくできますが、大きくしてる人はほとんど居ないと推
察します
・一方で静的変数取得の関数がいいところとしては、
クリアしないという性質は、マクロ実行の間のみ取得という制限から解放され、dl
lを常駐タイプにした場合と親和性があることです。
「マクロ実行中に限らずいつでも、どのプロセスからでも」値を引き出せるという
とても大きなメリットがあります。
但し、この場合、staticvariableへのgetとset両方をネイティブ関数として提供す
るのが適切かと思います。
(getだけ提供すると、getはマクロが走らないが、setはEVALMACROもしくはEXECMAC
RO_MEMORYなどでマクロを走らせないと設定できないという非対称になってしまうため)
・総合的には静的変数に制限するよりもAで説明したものの方が応用範囲がかなり広
いかと思います。
(性質が違うため比べにくいですが)
(マクロ実行中のみ実行可能)
size_t nExprVariableByteSize = WINAPI Hideamru_ExpressionMacro(const wchar_t
*pwszExpression, void *pExprVariableBuffer, int* pExprVariableTypeBuffer);
pwszExpression : 簡単に言えば、代入式( A = B; )の「B」に書ける評
価式文字列。
複数の式文は認められない。(ようするに「;」があ
ってはダメ)
"val(sprintf("%d", lineno))" などは大丈夫。
pExprVariableBuffer : 数値型なら、「int num; → &numで受け取り」, 「w
char_t* pwstr;→ pwstrで受け取り」
pExprVariableTypeBuffer : 秀丸は「この型」だと(想定して)値を (*pExprVaria
bleBuffer) へと格納しましたよ、解釈側はその型で解釈してね、という情報
「int nType → &nType」などとして受け取り。int,
double, wchar_t*, other, などを意味する値を受け取る。
nExprVariableByteSize : (*pExprVariableBuffer) は何バイトのデータなのか。
0ならそもそも実行に失敗している。
将来バイト列を渡したいといった要望が出た場合など
に備えて。
基本的には文字列と同じような取得方法となるが、サ
イズがわかっていれば、NULL終端以外のデータでも取れるようになる。
あるいは
(いつでも実行可能)
BOOL succcess = WINAPI Hidemaru_SetStaticVariable( const wchar_t *pwszVariav
leName, const wchar_t *pwszStringValue, int nCommonParam );
// successに失敗している
HGLOBAL memoryhandle = WINAPI Hidemaru_GetStaticVariable( const wchar_t *pws
zVariavleName );
// handleが0は取得自体に失敗しているか、対象のpwszVariavleName自体が無い (秀
丸の静的変数って、値が空文字だとどういう扱いなんですかね? マクロ変数は0や""
は変数未定義と同じ扱いっぽいですが)
---------------------------------------------------------------
いずれにしても、かなりニッチですし、
現行のWindowsにおける主要言語に対してはマクロと言語空間のやりとりには困らな
いようなものは、
(ロックしてないことによるアンセーフに目をつぶれた)
提供できてるんではないかとは思っていますので、
気が向いたらくらいでよいかとおもいます。
|
|