none
JavaScriptからActiveX(ATL)のメソッドを実行、その戻り値を取得する方法 RRS feed

  • 質問

  • JavaScriptからActiveXのメソッドを実行し、そのメソッドの戻り値を
    取得する方法について質問させて頂きます。


    JavaScript→ActiveXの連携を、[接続ポイント]のサポートにチェックし
    作成したATLコントロールを利用して行っています。

    ■ATLコントロールクラスのインタフェースを、
    右クリック→[追加]→[メソッドの追加]でメソッドを作成しました。
    以下のメソッドが作成されました。
    (抜粋)
    ----------------------------------------------------------
    STDMETHODIMP CATLControl::Sample()
    {
        AFX_MANAGE_STATE(AfxGetStaticModuleState());
        // TODO: ここに実装コードを追加してください。
        return S_OK;
    }
    ----------------------------------------------------------

    ■次に、JavaScriptを以下のように作成
    (抜粋)
    ----------------------------------------------------------
    <script language="JavaScript">
    <--
        function bClick(){
            alert(ATLControl.Sample()); //Sampleメソッドを呼ぶ
        }
    //-->
    </script>
    <OBJECT ID="ATLControl" 
    CLASSID="CLSID:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" 
    CODEBASE="ATLControl.dll">
    </OBJECT>
    <INPUT TYPE="button" VALUE="Click" ONCLICK="bClick();"/>
    ----------------------------------------------------------

    JavaScriptのボタンクリック時、JavaScriptからActiveXの
    メソッド実行はできましたが、その戻り値を受取る方法がわかりません。
    alert(ATLControl.Sample());の部分で、undefinedと表示されます。
    (undefinedではなく、メソッドでReturnした値を取得したい)

    素人な質問で大変申し訳ございませんが、ActiveXメソッドの戻り値を
    受取る方法をご存知の方がおられましたらアドバイスを頂戴したいと思います。
    宜しくお願いします。

    2011年4月23日 9:24

回答

  • HRESULT 値は見ることができないんじゃないかなぁ。
    どうしても戻り値を返したいなら、out, retval 指定がなされた引数で返すとか。
    (参考:http://moz-addon.g.hatena.ne.jp/ZIGOROu/20071204/1196786199

    インターフェースにメソッドを追加する画面で、引数の追加で out と retval を指定できたと思いますので試してみてください。

    ところで、COM の基礎的なところは理解されていますか?
    行き当たりばったりで作るのではなく、いろいろと調べて仕組み、ルールみたいなものを知っておくべきだとは思います。
    (なかなかまとまった情報がなくて苦労するかもしれませんが)


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク sky1973 2011年4月23日 15:54
    2011年4月23日 10:46
    モデレータ

すべての返信

  • HRESULT 値は見ることができないんじゃないかなぁ。
    どうしても戻り値を返したいなら、out, retval 指定がなされた引数で返すとか。
    (参考:http://moz-addon.g.hatena.ne.jp/ZIGOROu/20071204/1196786199

    インターフェースにメソッドを追加する画面で、引数の追加で out と retval を指定できたと思いますので試してみてください。

    ところで、COM の基礎的なところは理解されていますか?
    行き当たりばったりで作るのではなく、いろいろと調べて仕組み、ルールみたいなものを知っておくべきだとは思います。
    (なかなかまとまった情報がなくて苦労するかもしれませんが)


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク sky1973 2011年4月23日 15:54
    2011年4月23日 10:46
    モデレータ
  • Azuleanさん

    回答有難う御座いました。

    HRESULT 値は見ることができないんじゃないかなぁ。
    どうしても戻り値を返したいなら、out, retval 指定がなされた引数で返すとか。
    (参考:http://moz-addon.g.hatena.ne.jp/ZIGOROu/20071204/1196786199

    インターフェースにメソッドを追加する画面で、引数の追加で out と retval を指定できたと思いますので試してみてください。

    out retvalの引数を追加することで、戻り値として受取る事ができました。

    実現できて大変嬉しいです!

    ところで、COM の基礎的なところは理解されていますか?
    行き当たりばったりで作るのではなく、いろいろと調べて仕組み、ルールみたいなものを知っておくべきだとは思います。
    (なかなかまとまった情報がなくて苦労するかもしれませんが)



    COMの基礎的なところも含めて現在勉強中です。
    来月以降ATLを使った開発が始まりますので、それに向けて今は調査を行っています。
    参考になる書籍も少なく今は悪戦苦闘の毎日です。


    また宜しくお願いします。
    2011年4月23日 15:53