COMの呼び出しで返値が得られないケース(FNo.04468
たけとり さん 09/11/14 11:00
 
たびたびすみません。

COMを呼び出したときに、なぜか返値が得られない例がありましたので、報告します。
環境は、XP sp2 + beta24 + カレントドライブがHDD・外部メディアとも + 持ち出し
キットの有無ともです。

具体的には、以下のコードです。

#objFSO = createobject("Scripting.FileSystemObject");
#objFile = callmethod_returnobj( #objFSO, "GetFile", hidemarudir + "\\KEY.TX
T");
$s = getpropstr( #objFile, "DateLastModified");  // *A
message hex(getresultex(10));  // *B

*A行で、本来はファイル更新日時を得られると思うのですが、返ってくる結果は""に
なります。
これは、対象となるファイルを変えても、またはmember関数を使ったり、str(getpro
pnum(〜))としても同様です。
また、その際は*B行でも0が返ります。
ただし、正しい結果が返ってこないのは、(少なくとも私が確認した中では)Date〜で
始まる3種類だけでほかのプロパティ(たとえばSizeなど)では適切な値になります。
そのときは*Bでも1が返されます。
# 意図されてのものor私のミスor私の環境だけで発生するものならすみません。

なお、同じ環境で以下のコード(http://www.atmarkit.co.jp/fwin2k/operation/wsh1
0/wsh10_03.html)を、DOSプロンプトからcscript.exeを使って実行した場合は、正し
いプロパティを表示してくれます。

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile("〜")
WScript.Echo "DateCreated      : " & objFile.DateCreated
WScript.Echo "DateLastAccessed : " & objFile.DateLastAccessed
WScript.Echo "DateLastModified : " & objFile.DateLastModified

膨大なCOMオブジェクトの個々のプロパティに対して、「うまくいかない」ゝといち
いち報告をあげるのもどうかと思ったのですが、同じオブジェクトのこれだけができ
ないのと、FileSystemObject(という標準ライブラリ的なもので比較的よく使うと思
われるオブジェクト)での事象ですので、何かの参考にしていただければと思ってい
る次第です。

[ ]
RE:04468 COMの呼び出しで返値が得られなNo.04473
秀丸担当 さん 09/11/16 11:47
 

>*A行で、本来はファイル更新日時を得られると思うのですが、返ってくる結果は""に
>なります。

こちらでも確認することができました。
報告ありがとうございます。
日付形式のプロパティに対応していなかったためで、適当な文字列に変換して返
すように修正させていただきます。

[ ]
RE:04473 COMの呼び出しで返値が得られなNo.04479
たけとり さん 09/11/16 17:32
 
>すように修正させていただきます。

よろしくお願いします。

[ ]