memberを使ったマクロNo.09685
styth さん 21/11/26 09:13
 
 memberを使ったマクロを自作していて、いつもエラーになってしまうので、
 ヘルプを参照したところ、

>文はresultが設定されますが、関数ではresultは設定されません。
> createobject/getobject以外の関数では戻り値で成功したかどうかを知ることが
>できないので、getresultexの10または11でエラー情報を得ることができるようにな
>っています

 との説明が書かれていました。
 でも実際には、「戻り値で成功したかどうかを知ることができない」というこ
とは、ないのはないでしょうか?

 過去ログを探したところ、https://log.maruo.co.jp/hidesoft/hidesoft_4/x08612.html

 if( member(##objFSO, "DriveExists", $$strDrive) != 0 ) {
 
 を見つけました。

 裏技的なのか、過去バージョンとの互換性で、そうなっているのか分かりませ
んが、戻り値を使って問題ないでしょうか。

[ ]
RE:09685 memberを使ったマクロNo.09686
秀丸担当 さん 21/11/26 12:18
 

呼び出しが成功したかどうかと、戻り値は別と考えてもらうといいです。
例えばDriveExistsの場合、メソッドの呼び出しに成功したときに、ドライブがある
か無いかを戻り値で知ることができます。
例えばメソッド名を間違えた場合には呼び出しに失敗し、戻り値はあてにならないと
いうことになります。

#objFSO = createobject("Scripting.FileSystemObject");

$method="DriveExists";
$drive="C";
#f = member(#objFSO, $method, $drive);
message $method+"\n"+$drive+"\n成否:"+str(getresultex(10))+"\n戻り値:"+str(#f);

$method="DriveExists";
$drive="X";
#f = member(#objFSO, $method, $drive);
message $method+"\n"+$drive+"\n成否:"+str(getresultex(10))+"\n戻り値:"+str(#f);

$method="DDDriveExists"; //タイプミス
$drive="C";
#f = member(#objFSO, $method, $drive);
message $method+"\n"+$drive+"\n成否:"+str(getresultex(10))+"\n戻り値:"+str(#f);

releaseobject #objFSO;
endmacro;

[ ]