dllからhidemaru.getFunctionId で取得しNo.11394
こみやんま さん 23/05/24 12:54
 
v9.22でやる必要はないですが、せっかく hidemaru.getFunctionIdという仕組みがあ
るのであれば、

WebView2のpostMessage経由で関数を呼び出せるのと同様に、
C++やC#などで作成したdllから呼び出せるようにしてはどうでしょうか。

postMessage とは異なり、受け取りをやや柔軟にすることが出来るので、

function aaa(arg: string): string

のような、文字列を1つ引数とし、文字列を1つ返す関数に対応すると。

let id = hidemaru.getFunctionId(aaa);
したidを何らかの自己手段でdllへと伝達して、

GLOBALHANDLE* Hidemaru_DoFunctionById(id, wchar* param);
(GLOBALHANDLEがnullなら呼び出しに失敗したか、登録IDの関数がすでに有効ではな
いなど)

みたいな形です。

これ1本あるだけで、javascript層で薄いラップ関数を各自が用意すれば、
dllから各種の同期・非同期の関数が呼び出し、返りの値も得ることが
できるようになるため、
一気に大量(というかほぼ全て)の関数をHidemaru_****に提供したも
同然なほどの効果があるのではないでしょうか。


[ ]
RE:11394 dllからhidemaru.getFunctionId No.11395
こみやんま さん 23/05/24 13:26
 
もうひとつの利点は、
11340
https://www.maruo.co.jp/turukame/3/x11340_.html#11340

みたいな javascript側のfunctionをユーザーがカスタムするコールバックとして利
用し、dllはそのJS関数より「外側」の複雑な処理実現や負荷分散を担当する

みたいな使い方がしやすくなるという点でしょう。




[ ]
RE:11395 dllからhidemaru.getFunctionId No.11397
秀丸担当 さん 23/05/24 16:51
 
getFunctionIdで得られるような関数IDは、他の場面でも使えたらいいかもしれません。
いろいろ内部的な都合もあって、あらゆる場面で使えるかというと、ちょっと自信が
無いです。
特にWebView2は何かにつけて非同期ばっかりで、苦労します。
もともとsetTimeOutやstdio関係で非同期想定のことを流用しただけみたいな感じに
なっています。
もし何かやるとしたら同期寄り(?)に特化したほうがいいかもしれません。

[ ]
RE:11397 Hidemaru_***の追加No.11398
こみやんま さん 23/05/25 13:24
 
Hidemaru_*** シリーズで現在追加する価値が高いのは、
Hidemaru_BrowserPaneCommand と Hidemaru_RenderPaneCommandでしょうか。

HGLOBAL Hidemaru_BrowserPaneCommand(wchar_t* command_string|json_string)

HGLOBAL Hidemaru_RenderPaneCommand(wchar_t* command_string|json_string)

エディタペインの様子を監視しつつ、
ブラウザ/レンダーへ伝達という側面が強いので
必然的に常駐的な性質を持つプログラムとなることが多く
便利に使えるかと思います。
(送信する度に一瞬マクロ実行中になってしまうのを避けられるので安心感がある)

BrowserPaneCommand や RenderPaneCommand にコマンドを盛り盛りに詰め込んだ利点
も活きるかと。

また、いかにも必要となりそうな道具という意味で、
既存でHidemaru_*** に生えている関数達ともかなり相性が良いと言えるのではない
でしょうか。

[ ]
RE:11398 Hidemaru_***の追加No.11401
秀丸担当 さん 23/05/25 17:35
 
Hidemaru_BrowserPaneCommandやHidemaru_RenderPaneCommandのようなものがあった
ら、いろいろ使い道はあるかもしれません。
もしやるとしたら、getFunctionIdでいま使いまわしている方式よりも、やりやすい
と思います。
そういう1つのネタにしておこうと思います。

[ ]