[ 新規に投稿する ]

getstaticvariableでNULLが渡るNo.38456
あべのり さん 20/10/09 15:52 [ コメントを投稿する ]
  あべのりです.いつもお世話になっております.

ちょっと調べが甘いのですが,次のような状況が起こっているように思われます.

loaddll "test.dll"; // 適当なDLL
setstaticvariable "V","A";
##_ = dllfunc("FUNC",getstaticvariable("V"));

FUNCの第一引数には"A"を表す文字列ポインタが来ることを期待していたのですが,NULLが来るようです.以前のバージョンでは期待通りの値が来ていたと思います.

環境は
Windows 10
秀丸 Version 8.94,32bit
DLLも32bitのもの
です.

よろしくお願いします.
[ ]
RE:38456 getstaticvariableでNULLが渡るNo.38457
あべのり さん 20/10/09 15:53 [ コメントを投稿する ]
  なお,

loaddll "test.dll"; // 適当なDLL
setstaticvariable "V","A";
$$s = getstaticvariable("V"):
##_ = dllfunc("FUNC",$$s);

のようにいったん変数に格納すると問題ないようです.
[ ]
RE:38457 getstaticvariableでNULLが渡るNo.38458
秀丸担当 さん 20/10/09 16:48 [ コメントを投稿する ]
 
確かに影響のある修正がありました。
V8.94β1のときに、setstaticvariable/getstaticvariableの上限が小さいということで増やしたのですが、そのときに数値と文字列をハイブリッド的にどちらでも使えるような修正も一緒にしていました。
dllfuncは引数の型が決まってないので、数値と文字列両方のときは、数値となるようにしていました。

同じ性質のものとして、従来からあるgetconfig関数と、member関数があります。
これらでもdllfuncで同様の問題が出る場合があります。

現状での回避策は、既に行われている通り、いったん文字列型変数にするといいです。

本当は上限が足らないということでできるだけ多く収まるようにすることを考えていたのですが、結局のところデフォルトで上限を増やしたのと、[その他]→[動作環境]→[環境]→[メモリ関係]の「詳細設定(E)...」より設定できるようにしたので、数値も扱えるようにしたことはそれほど意味が無かったです。
互換性の面で問題なので、文字列だけとなるように検討しようと思います。

[ ]
RE:38458 getstaticvariableでNULLが渡るNo.38462
あべのり さん 20/10/10 23:35 [ コメントを投稿する ]
  丁寧なご説明ありがとうございます.手元で結構例のようなコードを書いてしまっているのと,今後も書いてしまいそうなので元の挙動に戻ってくれると助かります.とりあえずは変数への待避でしのぎます.
[ ]
RE:38462 getstaticvariableでNULLが渡るNo.38476
秀丸担当 さん 20/10/13 09:39 [ コメントを投稿する ]
 
問題の点を従来どおりにして、V8.95β1を作成しました。
以下のページの「先行開発バージョンはこちら」からダウンロードできます。
https://hide.maruo.co.jp/software/hidemaru.html

なるべく早い段階でまた正式にしたいと思います。
[ ]
RE:38476 getstaticvariableでNULLが渡るNo.38492
あべのり さん 20/10/14 15:13 [ コメントを投稿する ]
  >
>問題の点を従来どおりにして、V8.95β1を作成しました。
ありがとうございます.手元のマクロが動くことを確認しました.
[ ]

[ 新規に投稿する ]