VS08 の MFC/ActiveX テンプレートを使用して、HTML ページにロードできる C++ ActiveX オブジェクトを作成し、Javascript でスクリプトを作成できます。しかし、Javascript を使用してコンポーネントのカスタム メソッドを呼び出すことができるインターフェイスを作成する方法がわかりません。
それを達成する方法を教えてください。Google で 2 時間以上費やしましたが、うまくいきませんでした。
ありがとう。
VS08 の MFC/ActiveX テンプレートを使用して、HTML ページにロードできる C++ ActiveX オブジェクトを作成し、Javascript でスクリプトを作成できます。しかし、Javascript を使用してコンポーネントのカスタム メソッドを呼び出すことができるインターフェイスを作成する方法がわかりません。
それを達成する方法を教えてください。Google で 2 時間以上費やしましたが、うまくいきませんでした。
ありがとう。
これは、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>
私は MFC ActiveX ラッパーにあまり詳しくありませんが、一般的な意味で質問に答えることができます。
IDispatch から派生したインターフェイスを持つ COM オブジェクトは、自動化言語 (例: Javascript) を介して呼び出すことができます。また、メソッドは「自動化互換」である必要があります。つまり、パラメータが VARIANT 型に変換可能であるか、明示的に VARIANT 型である必要があります。in/out パラメーターの場合、自動化の「フックアップ」が機能するには、型が VARIANT* でなければならないことに注意してください。
クライアント スクリプトで ActiveX オブジェクトにアクセスできるようにする方法 (例: ページに埋め込む) はわかりませんが、IDispatch から派生した単一のインターフェイスがあれば、Javascript (および他の自動化言語) から呼び出すことができます。それが役立つことを願っています...
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()
これを使用する必要はありませんでしたが、これはディスパッチ インターフェイスです。つまり、他のユーザーが呼び出すことができるオブジェクトのメソッドです。その意味:
DECLARE_MESSAGE_MAP() と DECLARE_EVENT_MAP() もありますが、これもあなたが望むものかもしれません。