互換DLLでFindRegularを実行した場合No.05330
h-tom さん 10/03/10 12:43
 

h-tom です。
FindRegularというか、dllfuncの仕様の確認?

HMJRE.DLL互換DLLで、山紫水明さんのマクロを実行してみたのですが、
正常に動作しませんでした。(BRegIf.dll/hmonig.dll)
  (http://www.maruo.co.jp/turukame/3/x05320_.html のマクロを
   byteindex_to_charindex で、動作するように修正。)

正規表現文字列:$seperator = "[,/\u2f]"
対象文字列  :$line1 = "\uC0\uC1\uC2,\uD2\uD3\uD4";
FindRegular実行時の戻り値
 hmjre.dll:12
 互換DLL :3

デバッグ用のログを確認すると、互換DLLには、"AAA,OOO" という文字が
渡されています。

dllfuncで、unicode = 4バイトデータ で文字列を渡されるのは、hmjre.dll
使用時(loaddllしている)だけなんでしょうか?
(hmjre.dll以外に、4バイトで渡されたとしても、誤動作するかもしませんが。)

[ ]
RE:05330 互換DLLでFindRegularを実行したNo.05331
秀丸担当 さん 10/03/10 12:59
 

>dllfuncで、unicode = 4バイトデータ で文字列を渡されるのは、hmjre.dll
>使用時(loaddllしている)だけなんでしょうか?
>(hmjre.dll以外に、4バイトで渡されたとしても、誤動作するかもしませんが。)

ご推察の通り、dllfuncに独自形式を渡すのは、hmjre.dllとtkinfo.dllだけにな
っています。
通常のDLLの場合は、独自形式を渡したら意味がわからないことになってしまう
ので、Unicodeを取り除いた形式に変換しています。
独自形式対応かどうかはDLLのファイル名ではなくて非公開の方法によって判断
されています。

現状では FindRegularW を作っていただいたように dllfuncw があるのと、
wideindex_to_charindex を使って秀丸エディタ上の座標変換もでき、独自形式
に依存しない形のDLLにしていただくのがいいのではないかと思います。

[ ]
RE:05331 互換DLLでFindRegularを実行したNo.05332
h-tom さん 10/03/10 16:43
 

h-tom です。

>ご推察の通り、dllfuncに独自形式を渡すのは、hmjre.dllとtkinfo.dllだけにな
>っています。
>通常のDLLの場合は、独自形式を渡したら意味がわからないことになってしまう
>ので、Unicodeを取り除いた形式に変換しています。
了解です。
最近、hmonig.dllの対応もあり、unicodeでいろいろやっているのですが、
ちょっと気になったので、確認してみました。

ついでに、charindex_to_byteindexについて、
ヘルプによると、
>  以下の例で、"□"がUnicodeの全角文字だとしたら、4を返します。
>  "□"がUnicodeの半角文字だとしたら、5を返します。
>
> #a = charindex_to_byteindex( "□abcde", 2 );
となっていますが、

以下のマクロだと、同じ数字が返ってきます。
何か、勘違いしてますかね?

       // 0     12345  Charindex
       // 0     12345  文字位置
       // 0123  45678  バイト位置
$line1 = "\u0032abcde"; //(2)
       // 0  1  23456  Charindex
       // 0     12345  文字位置
       // 0123  45678  バイト位置
$line2 = "\u9FB3abcde"; //(2)
#l1 = strlen($line1);
#l2 = strlen($line2);
#a1 = charindex_to_byteindex( $line1, 2 );
#a2 = charindex_to_byteindex( $line2, 2 );
message  "#a1 = " + str(#a2) + " #a2 = " + str(#a2) + " \n" +
         "#l1 = " + str(#l2) + " #l2 = " + str(#l2);
endmacro;

---------------------------
秀丸エディタ
---------------------------
#a1 = 4 #a2 = 4
#l1 = 7 #l2 = 7
---------------------------
OK  
---------------------------

[ ]
RE:05332 互換DLLでFindRegularを実行したNo.05333
秀丸担当 さん 10/03/10 16:56
 

>以下のマクロだと、同じ数字が返ってきます。
>何か、勘違いしてますかね?

最後のmessage文のところの変数名が同じになってしまっているのではないかと
思います。

message  "#a1 = " + str(#a1) + " #a2 = " + str(#a2) + " \n" +
         "#l1 = " + str(#l1) + " #l2 = " + str(#l2);

とすると違う数字が表示されました。

[ ]
RE:05333 互換DLLでFindRegularを実行したNo.05335
h-tom さん 10/03/10 17:40
 

h-tom です。

>最後のmessage文のところの変数名が同じになってしまっているのではないかと
>思います。
>
>message  "#a1 = " + str(#a1) + " #a2 = " + str(#a2) + " \n" +
>         "#l1 = " + str(#l1) + " #l2 = " + str(#l2);
>
>とすると違う数字が表示されました。
その通りです。お騒がせしました。

[ ]