Beispiel: MFCAxs.exe implementiert einen Active Script Host MFC

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 168214 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

MFCAxs.exe ist ein Beispiel, das MfcAxscrVb enthält. MfcAxscrVb ist eine didaktischen Beispiel Active Scripting Host mit MFC geschrieben. Hostet die VBScript-DLL; die Active Scripting-Mechanismen sind jedoch generische Active Scripting-Engine. MfcAxscrVb zeigt nur eine mögliche Möglichkeit, Dispatch-Objekte von Host, um die Host Active Scripting Schnittstellen zu implementieren und verbinden die Nachrichten in der Host mit der scripting-Engine ausgelöste Ereignisse bereitstellen.

MfcAxscrVb enthält eine Visual C++ 5.0 Arbeitsbereich und Projekt-Datei. Obwohl keine VC++ 4.2 kompatibel Makefile oder Mdpfile bereitgestellt wird, ist der Quellcode für MfcAxscrVb mit 4.2b MFC kompatibel.

Voraussetzungen: COM, Automatisierung

Weitere Informationen

Die folgende Datei steht im Microsoft Download Center zum Download zur Verfügung:
MFCAxs.exe
Weitere Informationen zum Download von Microsoft Support-Dateien finden Sie in folgendem Artikel der Microsoft Knowledge Base:
119591So erhalten Sie Dateien vom Microsoft Support im Internet
Microsoft hat diese Datei auf Viren überprüft. Microsoft hat dazu die neueste Software zur Virenerkennung verwendet, die zum Zeitpunkt der Bereitstellung verfügbar war. Die Datei befindet sich auf Servern mit verstärkter Sicherheit, wodurch nicht autorisierte Änderungen an der Datei weitestgehend verhindert werden.

Ausführen des Beispiels

Beim Ausführen des MfcAxscrVb-Beispiels sehen Sie ein große Edit-Steuerelement in der oberen linken Ecke der Anwendung. Sie können einfügen oder Typ Skripts in diesem Fenster und wählen "Run Script" Schaltfläche, um das Skript aufrufen. Mehrere Testskripts werden in den Script.txt und testevents.txt Dateien bereitgestellt.

Verfügbarmachen des Hosts: Objekte fehlgeschlagen

Das Hauptziel für dieses Beispiel ist die Implementierung von Dispatch-Objekten mithilfe von MFC. Der Grund dafür ist einfach. Eine Skriptsprache nicht viel verwenden, wenn keine etwas zu Skript.

Die zentrale Technologie von der abhängt Active Scripting ist die meisten sicherlich der Automatisierung. Solide Kenntnisse der Automatisierung muss unbedingt vor dem code alle Active Scripting Host. Es gibt mehrere gute Verweise für die Automatisierung: Kapitel 14 und 15 der Brockshmidt des "in OLE," Kapitel 11 von Dale Rogerson "Inside COM" und "OLE-Automatisierung Programmer's Reference."

CCmdTargetPlus:

Was Sie benötigen, können einige Objekte, die für skriptfähigen Eigenschaften und Methoden durch IDispatch zulassen, aber auch skriptfähig Ereignisse generieren. MFC wird definitiv der Großteil der Routinearbeit für Sie beim Implementieren der Dispatch-Schnittstellen für COM-Objekt. Allerdings ist die einzige MFC-Klasse, die eingehende Dispatch-Schnittstellen und ausgehende Dispatch-Schnittstellen oder Ereignissenken, unterstützt COleControl. COleControl ist viel zu umfangreiche für Sie. Sie können nur möchten Ereignisse, eine Dispatch-Schnittstelle, und geben Daten. VBScript muss Typinformationen für Dispatch-Objekte zu lesen, die Ereignisse unterstützen. Sie können entweder diese im Handumdrehen erstellen oder einen statischen Typ Bibliothek für Ihre Host Dispatch-Objekte erstellen und ITypeInfo für jedes einzelne Objekt zu erhalten.

Während wahrscheinlich nicht erforderlich ist, hat MfcAxscrVb eine Basisklasse namens CCmdTargetPlus, die diese drei Teile unterstützt: dispatch-Schnittstelle, Verbindungspunkte mit Format Steuerelements Ereigniszuordnung und leicht zugänglichen Typinformationen über IProvideClassInfo. Großteil des Codes in CmdTargetPlus wurde hinzugefügt, um für Ereignis Zuordnungen ermöglichen die macht, Hinzufügen von Ereignissen zu viel einfacher Klassen abgeleitet.

dispatch-Objekte:

Alle Host bereitgestellte Dispatch-Objekte werden mithilfe von CCmdTargetPlus implementiert. Sind ein paar Dinge, die Sie auch Arbeit erledigen müssen. Finden Sie in die Dispatch-Objekte (CAButtonDispatch, CBButtonDispatch usw.) einer vorformulierten auf was erforderlich ist. Eine kurze Rundown auf der MfcAxscrvb-Objektmodell wird am Ende dieses Dokuments aufgeführt.

Wenn Sie Ihre eigenen Objekte hinzufügen, müssen Sie für drei eindeutige GUIDs für die primäre Dispatch und primäre Ereignisse Schnittstellen und die Clsid für das Objekt in Summe überprüfen. In der Implementierungsdatei und in der ODL-Datei durchgeführt werden muss. (Ausschneiden und trägt hier einfügen.) Schneiden Sie aus fügen Sie aller der Klasse Assistenten Makros ein und ändern Sie Sie dem neuen Klassennamen. Assistent für die Klasse ist sehr bestimmten, aber wenn Sie alles nur direkt in die .ODL, .cpp und .h-Dateien, können Sie es verwenden, um neue Ereignisse, Eigenschaften, hinzufügen und Methoden, um Ihre Dispatch Objekt, als wäre Sie ein MFC-OLE-Steuerelement. Dies ist die Art von praktisch.

MfcAxscrVb behält das Objekt die getrennt von dem MFC-Objekt, das tatsächlich verweisen auf Dispatch-Mechanismen implementieren. Das Dialogfeld hat beispielsweise einer Schaltfläche namens die "AButton," skriptfähig ist. Das MFC-Schaltfläche-Objekt ist CButton. Die CCmdTargetPlus abgeleitete Klasse, CAButtonDispatch, separaten und unterschiedlichen ist. Dies ist ein wichtiger Punkt. Was der Programmierer Host explizit möchte für grundlegende MFC-Objekte und Windows-Steuerelemente verfügbar gemacht wird skriptfähige beschränkt.

CEventsButton, CEventsEdit, CeventsListBox:

Für Ereignisse muss es Code, der auf eine Windows-Ereignis--z. B. Klicken auf eine Schaltfläche--antwortet und generiert ein Ereignis für das Skriptmodul. (Beachten Sie ein Ereignis eine Dispatch Invoke für eine Schnittstelle von Verbindungspunkten in der Host-Objekt behandelt wird.) In diesem Beispiel erreicht dies, indem Sie standardmäßige MFC-Meldungshandler in Objekte, die verschiedenen Klassen abgeleitet. Jede dieser Handler hat lediglich FireEvent (freundlicher des Codes hinzugefügt, CCmdTargetPlus) für die Dispatch-Objekt aufzurufen. Alles andere erfolgt automatisch.

Da die Dispatch-Objekt und das tatsächliche MFC-Fensterobjekt separate in diesem Beispiel sind, muss das übergeordnete Dialogfeld explizit die beiden miteinander verknüpfen. Dies erfolgt in der Mfcaxscrvbdlg-Konstruktor.

Benannte Objekte

Sobald Sie Dispatch-Objekte haben, müssen Sie diese einrichten, damit Sie das Skriptmodul kennt. Die Sammlung aller benannten Dispatch-Objekte, die das Skriptmodul kennt wird den "Script Namespace". bezeichnet. Elemente werden über die IActiveScript::AddNamedItem-Methode den Skript-Namespace hinzugefügt. Wie bereits erwähnt, ist es die Host Abgabe IDispatch für das Objekt implementieren und unterstützen von Typinformationen durch ITypeInfo für das Objekt. Wenn das Skriptmodul einen Verweis auf ein benanntes Element aufzulösen muss, verwendet es die IActiveScriptSite::GetItemInfo-Methode, um eine IUnknown-Zeiger (die hauptsächlich für IDispatch abgefragt) und einen Zeiger ITypeInfo anzufordern.

Nicht alle, die eine Host skriptfähige werden möchte muss ein benanntes Element. In der Regel haben der Host eine Hierarchie von Objekten, wobei Unterobjekte über ein Objekt auf höherer Ebene zugänglich sind. Eine häufige Metapher wird die Anwendung-> Dokument-> Artikel Hierarchie, wobei das Document-Objekt als IDispatch-Eigenschaft des Application-Objekts selbst über der obersten Ebene Application-Objekts zugänglich ist. Die gleiche Weise das Document-Objekt selbst stellt mehrere Unterobjekte und jede ist ein Element, die Sie über ein Element-Array oder andere Contrivance beziehen können.

Verwenden dieses Schema, das Skriptmodul ist intelligent genug ein Unterelement navigieren, wenn der Skriptcode die folgenden sagt ohne Dokument oder Element in den Skript-Namespace hinzugefügt werden:
Set Obj = Application.Document.Item(1)
				
wie solange die Unterobjekte als Get-Eigenschaften des Ihr übergeordneten Objekts verfügbar gemacht werden, das Skriptmodul findet diese erfolgreich. Interessanterweise kann das Skriptmodul "das Element in der Hierarchie der obersten Ebene angenommen". Was Dies bedeutet, dass Anwendungen wie das übergeordnete Element deklariert wird, dann ausreichend, um Folgendes für den vorherigen Skriptcode sagen ist:
Set Obj = Document.Item(1)
				
das ist genau wie Internet Explorer 3.0 Skriptcode im Kontext des Window-Objekts können Sie ohne voranstellen immer alle Verweise auf Objekte mit "Fenster". Ein Skript Host muss, um das Element der obersten Ebene Skript im Aufruf von AddNamedItems mit SCRIPTITEM_GLOBALMEMBERS-Flag. Was in der Regel wird nicht jedoch Deaktivieren von Active Scripting-Dokumentation vorgenommen, nur benannte Elemente Ereignisse unterstützen können. Im obige Beispiel, es ist keine Syntax zum folgenden um ein Ereignis in einem bestimmten Element zu behandeln, sagen:
   Sub Application.Document.Item(1)_OnEvent ' this doesn't work!
				
so, für die MfcAxscrvbdlg, da wir zum Behandeln der Ereignisse von jedem Objekt in der Hierarchie können möchten jedes Objekt wird hinzugefügt als ein benanntes Element. Jedes Objekt ist auch über das obersten Ebene Scripter-Objekt (das Dialogfeld selbst), das Ereignisse derzeit nicht unterstützt wird.

Webbrowser-Steuerelement:

In diesem Beispiel stellt das Skript Host nur ein externes Objekt in den Skript-Namespace. Dies ist das WebBrowser-Steuerelement im Dialogfeld von MFC Standard-Steuerelement Einkapselung Unterstützung gehostet. Sie müssen eine AddRef würden dispatch-Zeiger auf das Steuerelement, und Sie festlegen, sind. Für Ereignisse muss das externe Objekt einen ITypeInfo-Zeiger irgendwie verfügbar machen. MfcAxscrVb ruft dieses IProvideClassInfo::GetClassInfo ab. Als letzten Ausweg konnte eine Host des Objekts-Typ-Informationen selbst eine ITypeInfo verfügbar machen lesen. Glücklicherweise unterstützt das WebBrowser-Steuerelement GetClassInfo, die so MfcAxscrVb dazu nicht.

Wenn Sie dem Namespace andere externe Automatisierungsobjekte hinzufügen möchten, werden alle in der Regel erforderlich ist eine IUnknown-Schnittstelle mit CoCreateInstance zu erhalten. Alternativ kann die Host eine allgemeine Möglichkeit zum Abrufen von externen Objekte unterstützen, wenn auch diejenigen, die nicht zu müssen Ereignisse behandelt haben. In Visual Basic wird die Funktion dazu CreateObject aufgerufen.

In anderen Anwendungen abrufen: HostCreateObject

Außer den Satz von Eigenschaften verwendet, um alle untergeordneten Objekte verfügbar zu machen macht das zentrale Scripter-Objekt (das Dialogfeldklasse selbst) nur eine spezielle Methode verfügbar. Diese Methode veranschaulicht eine einfache bedeutet zum Simulieren des VB CreateObject-Funktion. Beachten Sie, dass die Methode HostCreateObject heißt zu betonen, dass diese Methode wird vom Skriptmodul nicht kostenlos bereitgestellt, aber die Host muss es implementieren selbst. Einige Hosts klar würde nicht möchten aus Sicherheitsgründen diese Möglichkeit bieten, IE3 ist ein gutes Beispiel. Das Hauptziel von HostCreateObject ist um Dispatch-Zeiger des angeforderten Objekts zurückzugeben. Wenn das Skriptmodul Dispatch-Zeiger hat, weiß Vorgehensweise von dort aus.

Hinweis : unter der Version 2.0, die Module VBScript und JScript jetzt CreateObject wie eine integrierte Funktion unterstützen. Die Host muss nicht um diese Funktion zu implementieren. Diese Funktion wird jedoch testen, ein Objekt, stellen Sie sicher sicher für Skripting bevor Sie das zu verwendende Objekt ist. Objekte einstuft selbst sicher für Skripterstellung durch unterstützen die IObjectSafety-Schnittstelle oder markieren die entsprechenden Komponentenkategorie-Registrierungseinträge für Safe-für-Skripterstellung. Verweisen Sie auf der Microsoft Knowledge Base weitere Informationen.

Assistentenunterstützung für Klasse

Das letzte wenig Bit von Betrug in MfcAxscrVb ist die Bearbeitungen, die zur Unterstützung der Klassen-Assistenten vorgenommen. Assistenten-Klasse, technisch gesehen ist nicht "dumb." Es ist nur mentally Frage gestellt. Es eignet sich ziemlich für es stimmt, aber denken Sie daran, dass einfach Blind diese speziellen Klassen-Assistent Kommentare nach Dateien durchsucht. Wenn Sie das Format für COleControl befolgen, können Sie nur über Get sofort mit Automatisierung und Ereignisse des Klassenassistenten Registerkarten.

Ein Problem ist, dass MfcAxscrVb Ableitung in einigen der Objekthierarchie verwendet wird. Alle Schaltflächenobjekte sind von ein allgemeines CButtonDispatch-Objekt abgeleitet, die verfügbar macht, Eigenschaften und Methoden, die alle der einzeln unterstützen werden würde. Wenn es Zeit zum Ausfüllen der ODL-Datei stammt, muss jedoch jedes einzelnes Objekt alle Eigenschaften und Methoden der übergeordneten Klasse enthalten. Dies soll natürlich Klassen-Assistenten zu verwechseln, wenn es Zeit, um die DISPIDs Zahl kommt. Wenn Sie Klassen-Assistent verwenden, stellen Sie sicher, dass Sie die generierten DISPIDs an zwei Orten überprüfen: die ODL-Datei für die Automatisierung-Klasse und der Enumeration in der Klassendefinition. Wenn Sie mit der Schaltfläche abgeleiteten Klassen arbeiten, ist es einfach an die gleiche DISPID, mehrere Eigenschaften und Methoden zugewiesen. Es ist viel einfacher die DISPIDs korrigieren jedoch als hinzuzufügen alles von Grund auf neu, damit die Funktionalität ist noch in MfcAxscrVb.

Mit Visual C++ 5.0 verbesserte Unterstützung von IDL-Methoden und Eigenschaften über die Klassenansicht ist es ein Toss einrichten, ob Klassen-Assistenten oder nicht benötigt wird. MfcAxscrVb unterstützt jetzt jedoch. Genießen.

Anhang A:-Objektmodell

Skripter:

Dies ist die master-Objekt von dem alle anderen Objekte abgeleitet werden. "IMfcaxscrvbDlg" in der ODL-Datei ist es jedoch als benanntes Element "Scripter." hinzugefügt Es verfügt über eine Methode, HostCreateObject, die oben beschriebene.

Schaltfläche Objekte:

AButton BButton, CancelButton, OKButton, obwohl

Eigenschaften
  • Beschriftung: Text der Schaltfläche.
Methoden Drücken Sie: Verhält, als wäre die Schaltfläche gedrückt wurde.
  • Drücken Sie: Verhält, als wäre die Schaltfläche gedrückt wurde.
Ereignisse
  • OnClick:, Ausgelöst, wenn die Schaltfläche gedrückt ist.
  • OnMouseOver:, Rollt Maus über der Schaltfläche ausgelöst.
  • OnFocus(bSet):, Ausgelöst, wenn Fokus erhält oder Schaltfläche entnommen.
BroCon:

BroCon ist der Name des WebBrowser-Steuerelements auf das Dialogfeld. Es unterstützt alle Eigenschaften und Methoden wie im Internet Client SDK-ActiveX-SDK für das WebBrowser-Steuerelement dokumentiert.

EditCon:

Methoden
  • AppendLine(strToAdd): Fügt StrToAdd end Fensterrand Text bearbeiten.
  • InsertLine (StrToAdd, nwobei): Fügt Sie zur Zeile #nWhere StrToAdd.
  • RemoveLine(nWhere): Entfernt die Zeile # nWhere aus Bearbeitungsfenster.
Ereignisse
  • OnMouseOver:, Rollt Maus über Fenster ausgelöst.
  • OnChar(strChar):, Ausgelöst, wenn Zeichen StrChar in Fenster eingegeben wird.
  • OnFocus(bSet):, Ausgelöst, wenn Fokus erhält oder Schaltfläche entnommen.
Lbox:

Methoden
  • AddString(strIn): Fügt StrIn in das Listenfeld.
  • ClearList: Löscht alle Zeichenfolgen im Listenfeld aus.
  • RemoveString(strRemove): Entfernt die erste Instanz von StrRemove und entfernt ihn im Listenfeld aus.
  • SelectString(strSelect): Auswählen von StrSelect angegebenen Zeichenfolge.
Ereignisse
  • OnMouseOver:, Rollt Maus über Fenster ausgelöst.
  • OnFocus(bSet):, Ausgelöst, wenn Fokus erhält oder Schaltfläche entnommen.
  • OnSelCancel(strCancelled): Bei Auswahl in einer Liste im Feld Element StrCancelled abgebrochen wird.
  • OnSelChange(strChange): Bei einer Liste im Feld Element StrChange vom Benutzer ausgewählt ist.

Eigenschaften

Artikel-ID: 168214 - Geändert am: Dienstag, 4. Februar 2014 - Version: 2.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Internet Explorer 3.01
  • Microsoft Internet Explorer 3.02
  • Microsoft Internet Explorer 4.0 128-Bit Edition
  • Microsoft Internet Explorer 4.01 Service Pack 2
  • Visual Basic Scripting Edition 1.0
  • Microsoft Visual Basic, Scripting Edition 1.1
  • Visual Basic Scripting Edition 2.0
  • Microsoft Foundation Class Library 4.2, wenn verwendet mit:
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
Keywords: 
kbnosurvey kbarchive kbmt kbdownload kbfile kbinfo kbsample KB168214 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 168214
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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