サンプル: MFC を使用して、アクティブ スクリプト ホストの MFCAxs.exe の実装します。

文書翻訳 文書翻訳
文書番号: 168214
すべて展開する | すべて折りたたむ

目次

概要

MFCAxs.exe は MfcAxscrVb 標本です。MfcAxscrVb ですがMFC を使用して記述された説明用のサンプル アクティブ スクリプト ホストです。ホストは、VBScript DLL です。ただし、アクティブ スクリプティング メカニズムを汎用には作業中のスクリプト エンジン。MfcAxscrVb を提供する可能性のある方法の一例を示しています。ホストのアクティブ スクリプトを実装するのには、ホストからディスパッチ オブジェクトインタ フェース、および windows ホストのメッセージとのイベントを関連付けるにはスクリプト エンジンに送出されます。

MfcAxscrVb に Visual C 5.0 のワークスペースとプロジェクト ファイルが含まれています。がVC + + 4.2 と互換性のあるメイクファイルまたは mdpfile 指定なしのソースコードMfcAxscrVb MFC 4.2b で互換性があります。

前提条件: COM オートメーション

詳細

次のファイルは、Microsoft ダウンロード センターからダウンロードできます。
MFCAxs.exe
マイクロソフトのサポート ファイルをダウンロードする方法の詳細については、Knowledge Base の資料を参照するのには、次の資料番号をクリックしてください。
119591 オンライン サービスからマイクロソフトのサポート ファイルを入手する方法
マイクロソフトは、このファイルのウイルスをスキャンしました。マイクロソフトは、ファイルが転記された日付に利用可能な最新のウイルス検出ソフトウェアを使用します。ファイルは、ファイルに不正な変更を防止するのに役立つセキュリティが強化されたサーバーに格納されます。

このサンプルを実行します。

MfcAxscrVb サンプルを実行するときに大きなエディット コントロールがわかります左上隅のアプリケーション。できますを入力または貼り付けるスクリプトこのウィンドウやスクリプトを呼び出すには、選択、「スクリプト実行」ボタンにします。複数のテスト スクリプトが、Script.txt に用意されています、Testevents.txt ファイルです。

ホストを公開することオブジェクトのディスパッチ。

このサンプルのメイン フォーカスをディスパッチ オブジェクトの実装はMFC を使用します。その理由は単純です。スクリプト言語の多くではありません。スクリプトには何もではない場合に使用します。

すべてアクティブ スクリプトに依存するコア ・ テクノロジーします。確かに自動化します。オートメーションの確実な知識があります。絶対に必要なすべてのアクティブ スクリプト ホスト コードを記述する前に。自動化のいくつかの適切な参照がある: 14 と 15 の章Brockshmidt の「内部 OLE、"デール Rogerson"内部 COM の「第 11 章および「OLE オートメーション プログラマーズ参照です。」

CCmdTargetPlus:

スクリプト可能なプロパティをいくつかのオブジェクトをいる必要なものとIDispatch のメソッドがスクリプト可能なイベントを生成もします。MFC確実に、グラントのディスパッチを実装する場合は処理を実行COM オブジェクトのインターフェイスです。ただし、両方をサポートしている唯一の MFC クラス着信のディスパッチ インターフェイスとアウトゴーイング ディスパッチ インターフェイス、またはイベントシンクは、COleControl です。COleControl は、目的のよりもかさばるです。、イベントのディスパッチ インターフェイスをするし、情報を入力するだけです。VBScriptイベントをサポートするディスパッチ オブジェクトの型情報を参照する必要があります。これその場で作成するか、静的な型ライブラリを作成可能性があります。ホストのオブジェクトにディスパッチして、ITypeInfo を取得します。個々 のオブジェクトです。

必要がない可能性がありますが、MfcAxscrVb という基本クラスを持つこれらの 3 つをサポートしています CCmdTargetPlus: ディスパッチ インターフェイス、コネクション ポイントは、コントロールのスタイルのイベント マップに、容易にアクセスIProvideClassInfo を通じて情報を入力します。ほとんどのコードCmdTargetPlus イベント マップは追加のイベントが追加されました派生クラスをより簡単にします。

ディスパッチ オブジェクト。

すべてのホストから指定されたディスパッチ オブジェクトは CCmdTargetPlus を使用して実装されています。いくつかのものは適切に機能するために必要な。いずれかを参照してください、ディスパッチのオブジェクト (CAButtonDispatch、CBButtonDispatch、およびなど) の[定型文で、何が必要か。MfcAxscrvb のオブジェクトの簡単な要約モデルは、このドキュメントの最後に一覧表示されます。

独自のオブジェクトを追加すると、次の 3 つの一意の Guid をよく確認します。プライマリ ディスパッチとプライマリ イベント インターフェイス、および clsid合計では、オブジェクトを返します。これは、実装ファイルで行う必要があり、.odl ファイル ファイルにします。(切り取りおよび貼り付け、ここします。)すべての貼り付けを切り取って、ウィザードのマクロ、クラスし、新しいクラスの名前を変更します。クラスウィザードは、非常に特殊ですが、すべてにだけ従うかどうか右には、.odl ファイル、.h、および .cpp ファイルを使用して、使用できる、新しいイベント、プロパティを追加するのには、MFC OLE コントロールであるかのように、ディスパッチ メソッドをオブジェクトします。これです。便利です。

MfcAxscrVb、ディスパッチ別のメカニズムを実装しているオブジェクトを保持します。これは、実際に参照している、MFC オブジェクトから。たとえば、ダイアログ ボックスには"スクリプトは、AButton、"という名前のボタンがあります。MFCCButton オブジェクトをボタンです。CCmdTargetPlus から派生したクラスで、CAButtonDispatch、独立し、区別があります。これは重要なポイントです。どのようなだけ基本の MFC オブジェクトを公開するのにはホストのプログラマが明示的に選択し、Windows コントロールはスクリプト可能になります。

CEventsButton、CEventsEdit、CeventsListBox。

イベントが、Windows イベント - に応答するコード必要たとえば、ボタンをクリックする: し、スクリプト エンジンはイベントを生成します。(イベントのディスパッチ処理インタ フェース上の呼び出しです。コネクション ポイントは、ホスト オブジェクト。)このサンプルではこれを達成します。さまざまな派生オブジェクトに標準の MFC メッセージ ハンドラーの追加クラスです。各ハンドラーだけで-の FireEvent を呼び出す必要があります。CCmdTargetPlus に追加するコード) をディスパッチ オブジェクト。それ以外のすべて自動的に行われます。

ディスパッチ オブジェクトと、実際の MFC ウィンドウ オブジェクトであるために区切るこのサンプルでは、ダイアログの親の 2 つを明示的にフックする必要があります。一緒に。これは、Mfcaxscrvbdlg コンス トラクターで行われます。

名前付きアイテム

ディスパッチ オブジェクトが作成されたら、それをセットアップするがようにするスクリプトエンジンは認識しています。すべての名前付きのディスパッチ オブジェクトのコレクションスクリプト エンジンについて知っている「スクリプト.」と呼びます項目スクリプト名前空間は、IActiveScript::AddNamedItem を追加します。メソッドです。既に説明したように、ホストの関税を実装するためには、IDispatch オブジェクトおよびサポートの種類-情報の ITypeInfo を経由対象のオブジェクト。スクリプト エンジンをするには、名前付きの参照を解決するために必要がある場合アイテムを使用、IActiveScriptSite::GetItemInfo メソッドを要求するのには(これは IDispatch を主に照会) IUnknown ポインターと、ITypeInfoポインターです。

ホスト スクリプトを実行するしようとしていないすべての名前付きアイテムをする必要があります。通常ホストはサブオブジェクトが、オブジェクトの階層があります。上位レベルのオブジェクトを介してアクセスできます。共通の比喩ですがドキュメント-> Document オブジェクトがアイテムの階層構造、-> のアプリケーションアプリケーションのトップレベルのオブジェクトとして、IDispatch プロパティからアクセスできます。アプリケーション オブジェクトのです。同様に、ドキュメント オブジェクト自体複数のサブオブジェクトを公開し、各項目を取得することができますです。アイテム配列またはその他の contrivance。

この方法を使用すると、スクリプト エンジンに移動する機能を備えている、サブ文書をしなくてもスクリプト コード次の記載されている場合の項目または、スクリプトの名前空間に追加する項目。
Set Obj = Application.Document.Item(1)
				
サブオブジェクトは、親の get プロパティとして公開されている限り、オブジェクトは正常には、スクリプト エンジンを検索します。面白いほど、スクリプト エンジンは、"階層内の最上位の項目を前提とする"ことです。これは、あるアプリケーションが、最上位の項目として宣言されている場合その前のスクリプトのコードを次のように十分です。
Set Obj = Document.Item(1)
				
これはどのように Internet Explorer 3.0 内のスクリプト コードができます、コンテキスト オブジェクトは、常にすべての参照を付けることがなくオブジェクトに「.」スクリプト ホストがトップレベルのスクリプトを識別する必要があります。項目は、SCRIPTITEM_GLOBALMEMBERS を使用して AddNamedItems の呼び出しでフラグです。どのような通常はアクティブ スクリプト ドキュメントでクリアが行われない、ただし、イベントが名前付きアイテムだけをサポートすることです。上記を使用してください。例は、イベントを処理するのには、次に構文がありません、特定のアイテムにします。
   Sub Application.Document.Item(1)_OnEvent ' this doesn't work!
				
したがっての MfcAxscrvbdlg、我々 のイベントを処理することができるようにするためすべてのオブジェクト階層では、すべてのオブジェクトは名前付きの項目として追加します。各オブジェクトはトップレベルのスクリプト オブジェクト (ダイアログを通じてアクセスすることも) がイベント現在サポートしていません。

WebBrowser コントロール:

このサンプルでは、スクリプト ホストは 1 つだけの外部のオブジェクトを公開する、スクリプトの名前空間。これは、ダイアログ ボックスでホストされている web ブラウザー コントロールです。MFC の既定コントロール コンテインメントのサポート。必要なものは、AddRef がありましたいるコントロール、および、ディスパッチ ポインターを設定します。外部のイベントの場合オブジェクトは、ITypeInfo ポインターを何らかの方法で公開する必要があります。MfcAxscrVb これを取得します。IProvideClassInfo::GetClassInfo 〜。最後の手段として、ホストことができませんでした。オブジェクトの型情報自体、ITypeInfo を公開するにを参照してください。GetClassInfo をその MfcAxscrVb 幸いなことに、WebBrowser コントロールをサポートしていますこれを実行しません。

その他の外部のオートメーション オブジェクトの名前空間に追加する場合は、通常が必要ですは、IUnknown インターフェイスを使用して取得するにはCoCreateInstance。また、ホストは汎用の手段をサポートします。必要がないとイベントがあるです、外部オブジェクトを取得します。処理します。Visual Basic では、これを行うには、関数 CreateObject と呼ばれます。

他のアプリケーションを取得する: HostCreateObject

以外のすべての子オブジェクトを公開するために使用するプロパティのセットをメイン スクリプト オブジェクト (ダイアログ クラス自体) を 1 つだけの特別を公開します。メソッドです。単純な VB をシミュレートするためことを意味するこのメソッドを示しています。CreateObject 関数です。メソッドを HostCreateObject と呼びますことに注意してください。このメソッドは無料、スクリプト エンジンでがないことを強調する、ホストが実装する必要がありますが、それ自体。一部のホスト明確にする必要はありません。この機能はセキュリティ上の理由から、内の IE3 は代表的な例です。は、HostCreateObject の主な目的は、ディスパッチ ポインターを返すには要求されたオブジェクト。スクリプト エンジン、ディスパッチ ポインターを取得すると、そこからの対処方法を知っています。

メモ: バージョン 2.0、VBScript および JScript のエンジンを今すぐサポートします。CreateObject は、組み込み関数。ホストが実装する必要はありません。この関数。この関数になっているかどうかを確認するのには、オブジェクトをテストすることただし、使用するオブジェクトを許可する前にスクリプトを作成するも安全です。オブジェクトと思われるそれ自体は、IObjectSafety をサポートしてスクリプトの安全インターフェイスまたは適切なコンポーネント カテゴリ レジストリ エントリをマークします。安全で、スクリプトを実行をします。詳細については、マイクロソフト サポート技術を参照してください。情報です。

クラス ウィザードのサポート

MfcAxscrVb に詐欺の最後の少しをする操作です。ClassWizard をサポートしてください。ウィザードの [クラス、技術的には「ダム」ではありませんただそれだけです。心という課題に直面します。何それが、注意してくださいにとても便利です。それだけで盲目的その特別な ClassWizard を探してのファイルを検索コメントしてください。COleControl は、フォーマットを実行すると、取得できます。ClassWizard のオートメーションとイベントを使用してタブを離れた。

1 つの問題を MfcAxscrVb 派生オブジェクトのいくつかを使用することです。階層です。Button オブジェクトの共通から派生しました。CButtonDispatch オブジェクト プロパティとメソッドを公開するの、個別にサポートします。ただし、に関して情報を入力するには.odl ファイル ファイル、個々 のオブジェクトのすべてのプロパティが含まれている必要があります。親クラスのメソッドです。言うまでもないことですが、この混乱になりますウィザードは、Dispid を番号を付けるときにクラスです。クラスを使用する場合ウィザードは、2 つの場所で生成された Dispid を再確認することを確認します、。オートメーション クラス、列挙体、クラス内の .odl ファイルのファイル定義します。ボタンの派生クラスを使用する場合を参照してくださいに簡単です。複数のプロパティとメソッドには、同じ DISPID を割り当てください。それほとんどです。Dispid を修正するのには簡単に最初では、すべてを追加するよりも、そのため、機能 MfcAxscrVb にままです。

Visual C 5.0 のサポート強化の IDL メソッドとプロパティクラス ビューで、これをどう ClassWizard が必要か、toss です。がMfcAxscrVb、現時点ではサポートされています。楽しむことができます。

付録 a: オブジェクト モデル

スクリプト:

これは、他のすべてのオブジェクトの派生元マスター オブジェクトです。これです。.Odl ファイル ファイルで"IMfcaxscrvbDlg"という項目が追加されますが、「スクリプトします。」それ HostCreateObject では前に、説明した、1 つの方法があります。

ボタン オブジェクト:

BButton のボタン、[キャンセル] ボタン、[ok] ボタン、RunScript

プロパティ
  • 標題: テキスト ボタン フェイスのです。
メソッドキーを押します。 ボタンが押された場合と同様に動作します。
  • キーを押します。 ボタンが押された場合と同様に動作します。
イベント
  • OnClick します。 ボタンが押されている場合に発生します。
  • OnMouseOver: ボタンにマウスをロール オーバーしたときに発生します。
  • OnFocus(bSet): フォーカスが指定されている場合に発生またはボタンから実行します。
BroCon:

BroCon ダイアログ ボックスの WebBrowser コントロールの名前です。それをサポートしています。すべてのプロパティおよびメソッドに、インターネット クライアント SDK と ActiveX に記載されているようSDK は、WebBrowser コントロールをします。

EditCon:

メソッド
  • AppendLine(strToAdd): strToAdd を終了するのにを追加編集テキスト ウィンドウの。
  • InsertLine (strToAdd, nWhere): 行の #nWhere に strToAdd を追加します。
  • RemoveLine(nWhere): 行 # nWhere 編集ウィンドウから削除します。
イベント
  • OnMouseOver: ウィンドウ上でマウスをロール オーバーしたときに発生します。
  • OnChar(strChar): ウィンドウに strChar の文字が入力された場合に発生します。
  • OnFocus(bSet): フォーカスが指定されている場合に発生またはボタンから実行します。
ストア:

メソッド
  • AddString(strIn): StrIn リスト ボックスに追加します。
  • ClearList: ボックスの一覧からすべての文字列を消去します。
  • RemoveString(strRemove): StrRemove の最初のインスタンスを削除し、リスト ボックスから削除されます。
  • SelectString(strSelect): strSelect で指定した文字列を選択します。
イベント
  • OnMouseOver: ウィンドウ上でマウスをロール オーバーしたときに発生します。
  • OnFocus(bSet): フォーカスが指定されている場合に発生またはボタンから実行します。
  • OnSelCancel(strCancelled): 場合は、リスト ボックスで選択は取り消されますstrCancelled の要素。
  • OnSelChange(strChange): は、リスト ボックス要素 strChange と、ユーザーが選択されています。

プロパティ

文書番号: 168214 - 最終更新日: 2011年7月5日 - リビジョン: 4.0
キーワード:?
kbinfo kbdownload kbfile kbsample kbmt KB168214 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:168214
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。
サポート期間が終了した「サポート技術情報」資料に関する免責事項
この資料は、マイクロソフトでサポートされていない製品について記述したものです。そのため、この資料は現状ベースで提供されており、今後更新されることはありません。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com