1

Javascript から呼び出し可能な COM オブジェクトを作成する必要があります。これを行うには、クラス ファクトリも実装する COM オブジェクトが必要であると言われたので、ここで ATL を試すように勧められました。誰かが Code Project ATL サンプルを教えてくれましたが、それはクラス ファクトリをカバーしていません。

単純なオブジェクトを使用して小さな ATL プロジェクトをビルドできますが、おそらくクラス ファクトリを提供していないため、インスタンス化できません。

では、Javascript から呼び出すことができる ATL を介して VS2010 で単純な COM オブジェクトを構築した経験のある人はいますか?

編集:まあ、 DECLARE_CLASSFACTORY_EX のドキュメントを読むと、デフォルトのクラスファクトリが提供されているように聞こえます。だから今、私は何が欠けているのか分かりません。Javascript からクラスをインスタンス化して呼び出すには何が必要ですか?

編集:また、明確にするために、私がオブジェクトを呼び出しているJavascriptは、MFCダイアログアプリのIE ActiveXコントロールに表示されているHTMLページにあります。これが、Javascript が実行されるコンテキストです。

4

2 に答える 2

4

まず第一に、Internet Explorer 用の MS 固有の JScript を意味していると思います。他のブラウザーは COM/ActiveX をサポートしていない可能性があるためです。

class-factory は、ATL フレームワークで既に提供されているため、明示的に実装する必要はありません。ATL ウィザードを実行するだけです: View --> Class view; クラス ビューでプロジェクト ルートを右クリック --> [追加] --> [クラス] --> [ATL シンプル オブジェクト]; クラス名を設定し、残りはすべてデフォルトのままにします。ウィザードは、次の主なものを定義します。

  1. それを実装するインターフェイスと共同クラス (IDL ファイル)。
  2. 上記の共同クラスの実際の実装となる C++ クラス。ヘッダー ファイルのマクロに注意してOBJECT_ENTRY_AUTOください。マクロは、クラスと ATL フレームワークのクラス ファクトリを「接続」します。
  3. *.rgs ファイル。共同クラスを Windows レジストリに登録するために使用されます。

これで、ウィザード (クラスを右クリック --> [追加] --> [関数の追加...]) または手動で、この新しく作成されたクラスにいくつかのメソッドを追加できます。

さらに、コンポーネントのセキュリティの問題を回避するためにIObjectSafety、クラスに実装する必要があります。 から c++ クラスを継承 し、インターフェイス マップにpublic IObjectSafetyImpl<CYourClass, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>追加するだけです。COM_INTERFACE_ENTRY(IObjectSafety)

これで、クラスを JScript 内から使用する準備が整いました。スクリプトでは、objectタグを使用して静的に作成するか、new ActiveX()ステートメントを使用して動的に作成できます。オブジェクトに接続ポイント (つまり、イベントを発生させる) があり、あまりトリッキーになりたくない場合は、前者のアプローチを使用する必要があります。

于 2012-11-07T14:42:55.590 に答える
1

別の質問に答えて、サンプルコードプロジェクトを以前に公開しました:COMイベントをVBScript(ATL)に公開します。VBSを使用しており、JS変換は簡単だと思います。

コード:SVNブラウザフレンドリー

別の関連サンプル:SVNブラウザフレンドリー+ブログ投稿で、進行中のことを説明しています:C ++ / ATLクラスからVBScript(VB6、VBA)コールバックを実装する3つの方法

于 2012-11-09T01:20:36.157 に答える