◀ANSI版開発トップへ
  • 3260 WSHマクロとCOM
    • 3270 Re:WSHマクロとCOM
      • 3276 Re2:WSHマクロ
  • [3260] WSHマクロとCOM もか 2003年10月16日 11:02

    WSHで、COMしてるのに、
    CoInitialize()、CoUninitialize()
    が呼ばれていません。WSHの挙動がおかしいのは、これのせいかもしれません。
     COMしたことないので良くわかっていないのですが、CoIni→CoIni→CoUnini→CoUnini(表記略)のように複数回呼ぶのはまずいのでしょうか?
     まずいのなら、ショートカットの解決でetc_uty.cppでもこれらの関数が使われているため、初期化と開放は、CProcess配下かどこかで、
    シングルトンみたいにして管理したほうがよさそうです。

    #ついでに、CCommandLineのインスタンスの管理も委託したいなぁ。あれdeleteしてない。。。(Unicode版は修正したけど)
    • [3270] Re:WSHマクロとCOM おに 2003年10月19日 17:53

      OleInitialize/OleUninitializeを呼べば、CoInitialize/CoUninitializeは中で呼ばれていますので、OLEも使う時はOle~に絞らないとダメです。
      で、それぞれ一回しか呼んじゃダメです。また、スレッド毎に呼ぶ必要があります。

      //今更で恐縮なんですが…
      //OLE D&Dしてるので、当然正しく呼ばれてるものと思ってた、というより、現にOLE D&Dが動作している以上正しく呼ばれてるのでは?
      //手元では上手く行ってたのも、ショートカットを使わなかったせいでしょうか?
      • [3276] Re2:WSHマクロ もか 2003年10月23日 18:25

        >//今更で恐縮なんですが…
        >//OLE D&Dしてるので、当然正しく呼ばれてるものと思ってた、というより、現にOLE D&Dが動作している以上正しく呼ばれてるのでは?
        >//手元では上手く行ってたのも、ショートカットを使わなかったせいでしょうか?
        ショートカット解決は、ファイルを開くと大抵呼び出されるんで、どうやら問題は別にあるみたいです。
        見当違いだったようです。申し訳ありません。
        で、まじめに調べてみました。
         ActiveScriptRubyをインストールして、マクロ板35のことをやってみると、同じように見事に落ちます。
        VC6.0によると、
        CWSH.cpp / CWSHClient / m_Engine->SetScriptState(SCRIPTSTATE_STA
        RTED)
        の向こう側、MSVCRT-RUBY18.DLLでスタックがあふれます。
        コールスタックや、メモリーマップを見た感じだと、MSVCRT-RUBY18.DLL内で、4つの関数が山手線みたいに再起実行されている模様。ということでサクラ側で直すのは難しそうです。
        スタックを5MBにすると、デフォルト(1MB)のとき再起実行したであろう付近で、今度はアクセス違反で落ちます。
         ActiveScriptRubyのsamples/ruby.htmlでもファイル-新規作成でもう一つ実行するとIEが固まる
        (sample-readmej.txtにも書いてある)ので、それと関係があるのかもしれません。

        テスト環境:
        ActiveScriptRuby 1.8.0.5
        Windows2000 SP4 / IE5.01 SP4
        sakura 1.4.3.1

        # m_Engine->SetScriptState(SCRIPTSTATE_CON
        NECTED)しなくてもいいのかな。
        # でも、その前で落ちるんで、関係ないみたい