◀ANSI版開発トップへ
  • 3404 WSHでエラー終了等
    • 3405 Re: WSHでエラー終了等
      • 3538 Re2: WSHでエラー終了等
  • [3404] WSHでエラー終了等 FILE 2004年02月07日 14:06

     こんにちは。
     いつも活用しております。(特に矩形選択とWSH)

     下記の現象が発生しましたので、報告します(Ver. 1.4.3.4)。

    ●VBScriptのTypeName

     [コード]
      Call CreateObject("WScript.Shell").Popup(TypeName(Me))
      Call CreateObject("WScript.Shell").Popup(TypeName(Editor))

     [現象]
      WinMe:Sakura が原因で OLEAUT32.DLL にエラーが発生しました。
         Sakura は終了します。
         問題が解決しない場合は、コンピュータを再起動してください。
      WinXP:"0x77bf3ec0" の命令が "0x00000001" のメモリを参照しました。
         メモリが "read" になることはできませんでした。

    ●VBScriptのVarType

     [コード]
      Call CreateObject("WScript.Shell").Popup(VarType(Me))
      Call CreateObject("WScript.Shell").Popup(VarType(Editor))

     [現象]
       Popupで0が表示され、新しくSakuraが起動する。
       WinMeでは、そのPopupをアクティブに出来るが、WinXPでは出来ない。
       Popupを閉じずに、元のSakuraと新しく起動したSakuraを閉じると、
      デスクトップの左上にBitBltされたようなイメージが(少し)残る。

      ソースを眺めてみましたが、原因は分かりませんでした…。
      新しくSakuraが起動するのは、 >>dev:3395 WSH(不明) と関係が
     あるかもしれません。

    以上、ご確認よろしくお願いいたします。

     [補足]
      JScriptでは、問題無さそうでした。
      (new ActiveXObject('WScript.Shell')).Popup(typeof this); // object
      (new ActiveXObject('WScript.Shell')).Popup(typeof Editor); // object
    • [3405] Re: WSHでエラー終了等 げんた 2004年02月08日 23:05

      >●VBScriptのTypeName
      デバッガ上で動かして動作を追ってみたところ,CInterfaceObjectTypeInfo::GetDocumentat
      ion()を処理せずに不当な戻り値を返しています.しかしここを全部NULLを返すようにしてもやっぱり起こる.memid==-1で呼びだされているのがそもそもなんか変?

      >●VBScriptのVarType
      CInterfaceObject::Invoke=IDispatch::InvokeがdispidMember==0で呼ばれるためにFileNewが動いているようです.
      ただ,現在無視しているwFlagsというパラメータが
      * 通常: 1 == DISPATCH_METHOD
      * VarType: 3 == DISPATCH_METHOD|DISPATCH_PROPERTYGET
      と異なるようです.
      • [3538] Re2: WSHでエラー終了等 FILE 2004年04月18日 15:47

        ▼ げんたさん
        > >●VBScriptのVarType
        > CInterfaceObject::Invoke=IDispatch::InvokeがdispidMember==0で呼ばれるためにFileNewが動いているようです.
        > ただ,現在無視しているwFlagsというパラメータが
        > * 通常: 1 == DISPATCH_METHOD
        > * VarType: 3 == DISPATCH_METHOD|DISPATCH_PROPERTYGET
        > と異なるようです.

         こんばんは。ご確認ありがとうございます。

         OAIDL.Hによると、DISPID の 0 は("value"プロパティとして)予約済みである
        と書かれている模様です。

        > /* DISPID reserved for the "value" property */
        > #define DISPID_VALUE ( 0 )

         1 以降を使用した方が良いのかも知れません。

         おそらくご確認済みかとは思いますが、後で見る人のためにも、ここに書いて
        おきます。