0

VS08 の MFC/ActiveX テンプレートを使用して、HTML ページにロードできる C++ ActiveX オブジェクトを作成し、Javascript でスクリプトを作成できます。しかし、Javascript を使用してコンポーネントのカスタム メソッドを呼び出すことができるインターフェイスを作成する方法がわかりません。

それを達成する方法を教えてください。Google で 2 時間以上費やしましたが、うまくいきませんでした。

ありがとう。

4

3 に答える 3

1

これは、HTML ページに ActiveX コンテナーを埋め込み、メソッドを呼び出す場合に機能します。

<html> 
<body> 
<object height="0" width="0" id="myControl" classid="CLSID:AC12D6F8-AEB7-4935-B3C9-0E4FB6CF7FB1" type="application/x-oleobject">
</object>
<script>
    var activexObj = document.getElementById('myControl');
    if(activexObj != null)
    {
        var result = myControl.myMethod();
        document.write("Result: " + result + "<br/>");
    }
    else
    {
        document.write("ActiveX component not found!<br/>");
    }
</script>
</body>
</html>
于 2008-11-19T12:02:18.553 に答える
1

私は MFC ActiveX ラッパーにあまり詳しくありませんが、一般的な意味で質問に答えることができます。

IDispatch から派生したインターフェイスを持つ COM オブジェクトは、自動化言語 (例: Javascript) を介して呼び出すことができます。また、メソッドは「自動化互換」である必要があります。つまり、パラメータが VARIANT 型に変換可能であるか、明示的に VARIANT 型である必要があります。in/out パラメーターの場合、自動化の「フックアップ」が機能するには、型が VARIANT* でなければならないことに注意してください。

クライアント スクリプトで ActiveX オブジェクトにアクセスできるようにする方法 (例: ページに埋め込む) はわかりませんが、IDispatch から派生した単一のインターフェイスがあれば、Javascript (および他の自動化言語) から呼び出すことができます。それが役立つことを願っています...

于 2008-11-06T23:14:56.117 に答える
0

VS08 MFC ActiveX テンプレートを使用している場合、コントロールの .h ファイルに次のようなスニペットが表示されることがあります (クラス宣言内では保護されています)。

afx_msg void AboutBox();

DECLARE_DISPATCH_MAP()

そして、.cpp ファイルに次のようなものがあります。

// Dispatch map

BEGIN_DISPATCH_MAP(CActiveXOutlookCtrl, COleControl)
    DISP_FUNCTION_ID(yourCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()

これを使用する必要はありませんでしたが、これはディスパッチ インターフェイスです。つまり、他のユーザーが呼び出すことができるオブジェクトのメソッドです。その意味:

  • 「AboutBox」は、彼らがそれを呼び出すために使用する名前です。
  • DISPID_ABOUTBOX は、関数の整数 ID です (これは任意だと思います。デフォルトでは多くの負の数が使用されるため、正の数を使用します)。
  • AboutBox はメソッド名です。
  • VT_EMPTY はメソッドの戻り値の型です。
  • VTS_NONE は、それが取るパラメータのタイプです。

DECLARE_MESSAGE_MAP() と DECLARE_EVENT_MAP() もありますが、これもあなたが望むものかもしれません。

于 2009-05-07T00:00:12.497 に答える