disableerrormsgNo.08181
bouz さん 05/06/14 09:09
 
disableerrormsg していても、
error: DLLがロードされてないのにdllfunc関数が使われました。
というダイアログが出てしまいます。

[ ]
RE:08181 disableerrormsgNo.08184
秀丸担当 さん 05/06/14 17:07
 

>disableerrormsg していても、
>error: DLLがロードされてないのにdllfunc関数が使われました。
>というダイアログが出てしまいます。

マクロ実行中に出すエラーには、disableerrormsgが効かないようにしてあるも
のもあります。
マクロの文法解析のエラーなどは、必ず出すようになっています。
このエラーも、それに相当するものと位置づけられているので、とりあえずこの
ままとしておきたいです。

[ ]
RE:08184 disableerrormsgNo.08186
bouz さん 05/06/14 17:16
 
ヘルプのdisableerrormsgによると、
− その他、「エラー」というタイトルのメッセージボックスが表示される処理すべて

と書いてあるので、これはつまり「エラー」と「error」のタイトルの違い、という
ことなんでしょうか?

誤記:
秀丸エディタVersion5.00 マクロ言語ヘルプ目次
「式ついて」となっています。(^_^;)

[ ]
RE:08186 disableerrormsgNo.08188
秀丸担当 さん 05/06/14 17:56
 

>と書いてあるので、これはつまり「エラー」と「error」のタイトルの違い、という
>ことなんでしょうか?

errorと出るのはたぶん英語版Windowsだからのような気もしますが、タイトルの
問題ではなく、エラーの種類の問題です。
文法エラーと同等の扱いとなっているということです。

>誤記:
>秀丸エディタVersion5.00 マクロ言語ヘルプ目次
>「式ついて」となっています。(^_^;)

またまたありがとうございます。
修正させていただきます。

[ ]
RE:08188 disableerrormsgNo.08189
bouz さん 05/06/14 18:00
 
了解しました。(^^)
要するにエラーダイアログには、文法エラーと動作エラーの2種類があって、同じよ
うにエラーというタイトルだけれども、
disable されるのは動作エラーのみ、ということなんですね。
やっとスッキリしました。ありがとうございました。

[ ]
RE:08186 disableerrormsgNo.08190
アルビレオ さん 05/06/14 18:06
 
アルビレオです。

>ヘルプのdisableerrormsgによると、
>− その他、「エラー」というタイトルのメッセージボックスが表示される処理す
>べて
>
>と書いてあるので、これはつまり「エラー」と「error」のタイトルの違い、という
>ことなんでしょうか?

1ユーザーの個人的見解ですが、disableerrormsgはマクロから呼び出された
「機能(コマンド)」が出すエラーメッセージを抑止するもので、文法エラーや
DLL呼び出しのようなマクロインタプリンタ側でのエラーは対象外だと思います。
後者を抑止する必要性を思いつけない、というか止められたら困ることばかりだ
と思うのですが…

[ ]
RE:08190 disableerrormsgNo.08191
bouz さん 05/06/14 18:15
 
>後者を抑止する必要性を思いつけない、というか止められたら困ることばかりだ
>と思うのですが…

そうとも限りませんよ。
DLLがロードされているかどうかで動作を切り替えるマクロで、
$s = dllfunc(なんたら);
というときに、disableerrormsg でこれがスムーズに流れ、
かつ $s は未定義だから "" なので、
その後 if ($s == "") などとやれば比較的簡単に組めます。

現状、if (loaddllfile == "かんたら") とやればいいんですけどね。
ふと思いついたというわけです。(^^)

[ ]
RE:08191 DLL がロードされているか?No.08192
Iranoan さん 05/06/14 18:36
 
 bouz さん今日は、Iranoan です。
> DLLがロードされているかどうかで動作を切り替えるマクロで、
 そういうマクロを組むなら、まず最初に result で確認すべきでしょう。

 また
> $s は未定義だから ""
というのは一般的に危険だと。

[ ]
RE:08192 DLL がロードされているか?No.08193
bouz さん 05/06/14 18:43
 
> そういうマクロを組むなら、まず最初に result で確認すべきでしょう。

何のresultですか?

>
> また
>> $s は未定義だから ""
>というのは一般的に危険だと。

ん?どういうことですか?不定ってことかな?
初期化しとけば済む話ですよね?

[ ]
RE:08193 DLL がロードされているか?No.08194
Iranoan さん 05/06/14 19:06
 
 bouz さん今日は、Iranoan です。
> > そういうマクロを組むなら、まず最初に result で確認すべきでしょう。
>
> 何のresultですか?
 loaddll 直後の。

> > また
> >> $s は未定義だから ""
> >というのは一般的に危険だと。
>
> ん?どういうことですか?不定ってことかな?
> 初期化しとけば済む話ですよね?
 loaddll していない/失敗した時、dllfunc, dllfuncstr がどんな値を帰す
か何処にも書かれていないからです。

[ ]
RE:08194 DLL がロードされているか?No.08195
bouz さん 05/06/14 19:10
 
ああ、なるほど。書き方が悪かったですね。
マクロ2本なんですよ。

マクロ本体 loaddll
execmacro 別のマクロ。これでdllがいるか判断するという話。

1本なら当然loaddllのresult見ますよ。普通。
道理で話が合わないわけだ。

[ ]
RE:08191 disableerrormsgNo.08196
アルビレオ さん 05/06/14 19:49
 
アルビレオです。

>>後者を抑止する必要性を思いつけない、というか止められたら困ることばかりだ
>>と思うのですが…
>
>そうとも限りませんよ。
>DLLがロードされているかどうかで動作を切り替えるマクロで、

そういう目的ならシステム変数のloaddllfileを使った方がいいでしょう。
DLLファイル名ではなく特定のDLL関数が使えるかどうかを判断したい、というこ
とならこれではだめでしょうけど。

Iranoanさん
>> 何のresultですか?
> loaddll 直後の。
たぶんbouzさんはloaddllする必要があるかを判断したいのだと思うので、これ
はちょっとズレてるかもしれませんね。

[ ]
RE:08196 disableerrormsgNo.08197
bouz さん 05/06/14 20:28
 
>そういう目的ならシステム変数のloaddllfileを使った方がいいでしょう。
普通そうでしょうね。既に書いた通り。
でもloaddllだとファイル名を変えるといちいち呼び出し側と合わせなきゃならない
から、何とかならんかと常々思っていた。
とにかく目的とか運用面の話はいいんです。
もう数ヶ月問題なく動いているマクロだし、loaddllfileを使わずに判断する手も夕
べ思いついたし、他にいくらでも手はあるでしょう。
コードの美感とか、スピードとかそういう観点で思いついた話なんですね。

>たぶんbouzさんはloaddllする必要があるかを判断したいのだと思うので、これ
>はちょっとズレてるかもしれませんね。

違うけどズレてるのは確かです。(^_^;)

[ ]
RE:08197 disableerrormsgNo.08198
アルビレオ さん 05/06/14 20:58
 
アルビレオです。

>>そういう目的ならシステム変数のloaddllfileを使った方がいいでしょう。
>普通そうでしょうね。既に書いた通り。

あ、見落としてました(^^;

>でもloaddllだとファイル名を変えるといちいち呼び出し側と合わせなきゃならない
>から、何とかならんかと常々思っていた。

>コードの美感とか、スピードとかそういう観点で思いついた話なんですね。

うーん、どうせdllfuncで判定しても文字定数などで関数名を書かなきゃならな
いんだから「呼び出し側と合わせなきゃならない」ことには変わりないです。

if(strstr(loaddllfile, "DLLファイル名") >= 0){...}

と書く方が動作が速いだろうし、コードの美しさでも大差がないと思うのですよ。
「同一ファイル名で別の場所にあるDLL」の危険性を気にするのなら、
「別DLLの同一関数名」の危険性も同様にあるわけだし。

上のコードをもうちょっと厳密に書きたければ

$dllname = "DLLファイル名";
if(rightstr(loaddllfile, strlen($dllname)) == $dllname){...}

と書くとか。

[ ]
RE:08198 disableerrormsgNo.08201
bouz さん 05/06/14 22:45
 
>うーん、どうせdllfuncで判定しても文字定数などで関数名を書かなきゃならな
>いんだから「呼び出し側と合わせなきゃならない」ことには変わりないです。

関数名変えるなんて書いてませんよ。(^_^;)
ファイル名だけです。関数名同じでDLLだけ入れ替えてテストするわけですよ。
おわかりいただけましたか?

[ ]
RE:08201 disableerrormsgNo.08202
アルビレオ さん 05/06/14 23:01
 
アルビレオです。

>>うーん、どうせdllfuncで判定しても文字定数などで関数名を書かなきゃならな
>>いんだから「呼び出し側と合わせなきゃならない」ことには変わりないです。
>
>関数名変えるなんて書いてませんよ。(^_^;)
>ファイル名だけです。関数名同じでDLLだけ入れ替えてテストするわけですよ。
>おわかりいただけましたか?

いや関数名はDLLに依存するものなので、普通はDLLが変われば関数名も変わるか
らいっしょだといいたかったんですが。
そりゃまあ共通の関数名を持つDLLもありますけど、少数派といってもいいんじ
ゃないでしょうか。

[ ]
RE:08202 disableerrormsgNo.08203
bouz さん 05/06/14 23:35
 
>そりゃまあ共通の関数名を持つDLLもありますけど、少数派といってもいいんじ
>ゃないでしょうか。

少数派どころか、ボク一人かもしれないです。

[ ]