Voorbeeld: MFCAxs.exe implementeert een actieve scripthost met MFC

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 168214 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Samenvatting

MFCAxs.exe is een voorbeeld van MfcAxscrVb. MfcAxscrVb is een Voorbeeld instructie Active Script ing host geschreven met gebruikmaking van MFC. Deze host is van de VBScript DLL; de mechanismen actief uitvoeren van scripts zijn echter een algemene Actieve script ing engine. MfcAxscrVb bevat slechts één mogelijke manier te bieden verzending objecten van de host, de host actieve scripts implementeren interfaces, en de berichten van windows in de host verbinding maken met gebeurtenissen gestart om de script-engine.

MfcAxscrVb bevat een Visual C++ 5. 0-werkruimte en project bestand. Hoewel geen compatibele Make VC + + 4. 2 of mdpfile wordt geleverd, de broncode voor MfcAxscrVb is compatibel met MFC-4.2b.

Voorwaarden: COM-automatisering

Meer informatie

Het volgende bestand wordt gedownload vanaf het Microsoft Download Center:
MFCAxs.exe
Voor meer informatie over het downloaden van Microsoft-ondersteuningsbestanden, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
119591Hoe Microsoft-ondersteuningsbestanden via Online Services downloaden
Microsoft heeft dit bestand op virussen. Microsoft gebruikt de meest actuele software voor virusdetectie die beschikbaar was op de datum waarop het bestand werd gepost. Het bestand is opgeslagen op beveiligde servers die onbevoegde wijzigingen aan het bestand verhinderen.

Het monster wordt uitgevoerd

Bij het uitvoeren van de MfcAxscrVb-voorbeeld ziet u een groot besturingselement in de linkerbovenhoek van de toepassing. U kunt plak of typ script in dit venster en selecteer de "Script uitvoeren" om het script aanroepen. Meerdere test scripts beschikbaar voor u in de Script.txt en Testevents.txt bestanden.

De Host bloot: objecten verzenden

De belangrijkste focus voor dit voorbeeld is de implementatie van verzending objecten met gebruikmaking van MFC. De reden hiervoor is eenvoudig. Een script taal niet veel Als er niets voor script gebruik.

De kern technologie waarvan alle actieve scripts afhankelijk is van de meeste zeker die van automatisering. Een solide kennis van automatisering is absoluut noodzakelijk is voordat u de code van een willekeurige host actief uitvoeren van scripts. Er zijn verschillende goede naslag informatie voor automatisering: hoofd stukken 14 en 15 De Brockshmidt 'in OLE,"hoofd stuk 11 van van Dale Rogerson 'in COM' en de "OLE-automatisering Programmer's Reference'.

CCmdTargetPlus:

Wat u nodig hebt zijn sommige objecten waarmee aanpasbare eigenschappen en methoden via IDispatch maar ook scripts voorbereide gebeurtenissen genereren. MFC zeker werkt de meeste van de knorvis u bij het implementeren van verzending interfaces voor een COM-object. Echter, het enige MFC-klasse die zowel ondersteunt binnenkomende verzending interfaces en interfaces voor uitgaande verzending of gebeurtenis Put, COleControl. COleControl is veel bezichtiging voor wat u wilt. U alleen gebeurtenissen, een interface voor verzending en informatie typt. VBScript moet lezen informatie over verzending objecten die gebeurtenissen ondersteunen. U kan maken dit een dynamische of statische typebibliotheek maken verzending van objecten voor de host en de ITypeInfo verkrijgen voor elk afzonderlijke object.

Hoewel waarschijnlijk niet nodig, heeft MfcAxscrVb een basis klasse met de naam CCmdTargetPlus die deze drie stuks ondersteunt: verzending interface verbindings punten met een overzicht van de gebeurtenis standaards tijl en gemakkelijk toegankelijk Typ de informatie via IProvideClassInfo. De meeste code in CmdTargetPlus is toegevoegd zodat de gebeurtenis kaarten, waardoor gebeurtenissen toevoegen aan afgeleide klassen veel gemakkelijker.

Verzending-objecten:

Alle geleverde host verzending objecten worden geïmplementeerd met behulp van CCmdTargetPlus. Er zijn een paar dingen die ze nodig hebben om goed te kunnen laten doen. Verwijzen naar een van de verzending van objecten (CAButtonDispatch, CBButtonDispatch, enzovoort) voor een standaard op wat nodig is. Een kort overzicht van het MfcAxscrvb-object model wordt weer gegeven aan het einde van dit document.

Als u uw eigen objecten toevoegen, moet u controleren of voor drie unieke GUID's voor de primaire verzending en primaire gebeurtenissen interfaces en de clsid voor het object in totaal. Dit moet worden gedaan in het implementatie bestand en in het bestand .odl. (Knippen en plakken helpt hier.) Knip en plak alle van de wizard macro's klasse en vervolgens wijzigen in de naam van de nieuwe klasse. Klasse De wizard is bij zonder, maar als u alles gewoon rechts de .odl. h en. cpp bestanden, kunt u het toevoegen van nieuwe gebeurtenissen, eigenschappen, en methoden om uw verzending object alsof het een MFC OLE-besturingselement. Dit is sorteren van handige.

MfcAxscrVb blijft de uitvoering van de afzonderlijke verzending mechanismen object uit de MFC-object, dat zij daadwerkelijk naar verwijst. Bijvoorbeeld, de dialoog venster bevat een knop met de naam van de "AButton," scriptable is. Het MFC knop object is CButton. De klasse die is afgeleid van CCmdTargetPlus, CAButtonDispatch, is onafhankelijk en verschillend zijn. Dit is een belangrijk punt. Alleen wat de host-programmeur expliciet wil bloots tellen voor basis MFC objecten en Windows-besturingselementen worden scripts.

CEventsButton, CEventsEdit, CeventsListBox:

Gebeurtenissen moet er bepaalde code die op een Windows-gebeurtenis reageert: Klik op een knop - en wordt een gebeurtenis gegenereerd voor de script-engine. (Vergeet niet dat een gebeurtenis is een verzending aanroepen op een interface afgehandeld door verbindings punten in het hostobject.) In dit voorbeeld gebeurt door standaard MFC bericht handlers toevoegen aan objecten die zijn afgeleid van de verschillende klassen. Elk van deze handlers is slechts aan te roepen (door van FireEvent de code toegevoegd aan CCmdTargetPlus) op het object verzending. Alles anders automatisch gebeurt.

Omdat het object verzending en de werkelijke MFC vensterobject afzonderlijk in dit voorbeeld wordt moet het bovenliggende dialoog venster expliciet de twee hook samen. Dit wordt gedaan in de constructor van Mfcaxscrvbdlg.

Benoemde Items

Als u objecten verzending hebt, hebt u deze instellen zodat het script motor weet over hen. De collectie van alle benoemde verzending-objecten dat de script eng ine is op de hoogte wordt genoemd de "Script naam ruimte'. Artikelen worden toegevoegd aan de script naam ruimte door de IActiveScript::AddNamedItem methode. Zoals ik eerder vermeld, is het recht van de host voor de uitvoering van een Voor het object en ondersteuning van type-informatie via ITypeInfo-voor IDispatch het object. Als de script-engine moet een verwijzing naar een benoemd omzetten item, wordt de methode IActiveScriptSite::GetItemInfo om te vragen een IUnknown pointer (die query's over IDispatch voornamelijk) en een ITypeInfo- aanwijzer.

Niet alles dat een host wil scriptable moet een benoemd item. De host heeft doorgaans een hiërarchie van objecten, waarbij subobjecten zijn toegankelijk via een object op een hoger niveau. Een algemene metafoor is de Toepassing-> Document-> de object hiërarchie, waar het Document-object is toegankelijk vanuit het Application-object op het hoogste niveau als een IDispatch-eigenschap van het Application-object zelf. Op dezelfde wijze, het Document-object zelf beschrijft verschillende subobjecten en elk is een artikel dat u kunt verkrijgen via een object matrix of andere misleiding.

Met deze regeling, de script-engine is slim genoeg om te navigeren naar een Als de scriptcode de volgende zegt zonder Document subpost of het Item moet worden toegevoegd aan de script naam ruimte:
Set Obj = Application.Document.Item(1)
				
Zolang de subobjecten worden blootgesteld als get-eigenschappen van het bovenliggende object, de script eng ine zoekt ze succes. Grappige genoeg, de script eng ine kan "nemen" het item op het hoogste niveau in de hiërarchie. Wat dit betekent is dat als de toepassing wordt gedeclareerd als het item op het hoogste niveau vervolgens volstaat het de volgende gegevens voor het voorgaande scriptcode zegt:
Set Obj = Document.Item(1)
				
Dit is precies hoe Internet Explorer 3. 0 kunt u scriptcode in de context van het Window-object zonder voorvoegsel altijd alle verwijzingen naar objecten met "Venster". Scripthost moet identificeert het script op het hoogste niveau item in de aanroep van AddNamedItems met behulp van de SCRIPTITEM_GLOBALMEMBERS vlag. Wat meestal wissen door Active Script ing documentatie is niet gemaakt echter, is dat alleen benoemde items gebeurtenissen kunnen ondersteunen. Met behulp van de bovenstaande in het volgende voorbeeld, er is geen syntaxis te zeggen de volgende voor het verwerken van een gebeurtenis in een bepaald item:
   Sub Application.Document.Item(1)_OnEvent ' this doesn't work!
				
Ja, voor MfcAxscrvbdlg, aangezien we voor het afhandelen van gebeurtenissen elk object in de hiërarchie, elk object wordt toegevoegd als een benoemd Item. Elke object is ook toegankelijk via het bovenste object schrijft (het dialoog venster zelf), die geen gebeurtenissen momenteel.

Besturings element WebBrowser:

In dit voorbeeld wordt de scripthost slechts één externe object beschrijft de Script naam ruimte. Dit is het besturings element WebBrowser ondergebracht in het dialoog venster door MFC van standaard besturings element beheersings ondersteuning. Alles wat u nodig hebt is een AddRef had verzending-aanwijzer op het besturings element, en u bent ingesteld. Gebeurtenissen op het externe object moet een ITypeInfo-pointer geraakt. MfcAxscrVb haalt dit via IProvideClassInfo::GetClassInfo. Als laatste redmiddel kan een host het object type-informatie zelf weer een ITypeInfo lezen. Gelukkig GetClassInfo, zo MfcAxscrVb biedt ondersteuning voor het besturings element WebBrowser dit doen niet.

Als u andere externe automatiseringsobjecten toevoegen aan de naam ruimte alle die gewoonlijk nodig is voor een IUnknown interface die is CoCreateInstance. De host kan ook een generieke middelen voor ondersteuning externe objecten verkrijgen, ook al zijn die niet te hoeven hebben van gebeurtenissen verwerkt. In Visual Basic, wordt hiervoor de functie CreateObject genoemd.

Bij andere Apps: HostCreateObject

Andere dan de set eigenschappen die worden gebruikt om alle onderliggende objecten toegankelijk te maken de belangrijkste schrijvers van object (het dialoog venster klasse zelf) beschrijft slechts één speciale methode. Deze methode illustreert dat een eenvoudige betekent voor het simuleren van VB De functie CreateObject. Houd er rekening mee dat de methode HostCreateObject om de naam Benadruk dat deze methode niet gratis door de scriptengine verstrekt is de host moet worden geïmplementeerd, maar zelf. Sommigen duidelijk wilt niet Deze mogelijkheid bieden om veiligheids redenen, IE3 is een goed voorbeeld. Het voornaamste doel van HostCreateObject is dat de aanwijzer van de verzending van de het gevraagde object. Als de script-engine de aanwijzer verzending heeft het weet wat te doen vanaf daar.

OPMERKING: Van versie 2. 0 ondersteunen de engines van VBScript en JScript nu Als een ingebouwde functie CreateObject. De host hoeft niet te implementeren Deze functie. Deze functie zal echter een object om te controleren of het testen is het veilig voor script gebruik voordat het object moet worden gebruikt. Objecten achten zelf veilig voor script gebruik door ofwel de IObjectSafety-ondersteuning interface of de juiste Component categorie registervermeldingen markeren voor veilige-voor-scripts. Verwijzen naar de Microsoft Knowledge Base voor meer informatie informatie.

Class Wizard ondersteuning

Het laatste beetje bedrog in MfcAxscrVb is de manipulaties aangebracht ondersteuning voor ClassWizard. Wizard klasse, is technisch gezien niet "dumb". Is het niet geestelijk betwist. Het is heel handig voor wat het doet, maar vergeet niet dat deze alleen 'blind zoekt naar bestanden zoekt die speciale ClassWizard opmerkingen. Als u de indeling voor COleControl volgt, kunt u vrijwel krijgen weg tabs met behulp van automatisering en gebeurtenissen van ClassWizard klikt.

Een complicatie is dat MfcAxscrVb afleiding in sommige van haar object gebruikt hiërarchie. Alle knop objecten zijn afgeleid van een gemeenschappelijke CButtonDispatch-object bevat de eigenschappen en methoden, waarin alle afzonderlijk zou ondersteunen. Echter, wanneer het tijd om in te vullen gaat het .odl bestand, moet van elk afzonderlijk object bevat alle eigenschappen en methoden van de bovenliggende klasse. Gaat dit betoog wil zeggen verward Wizard klasse wanneer er naar het DISPID's nummer. Als u een klasse Wizard, moet u controleren of de gegenereerde DISPID's in twee locaties: de bestand voor de klasse automatisering en de opsomming binnen de klasse .odl definitie. Wanneer u met de knop afgeleide klassen werkt, is het gemakkelijk om te zien dezelfde DISPID toegewezen aan verschillende eigenschappen en methoden. Het is veel gemakkelijker te corrigeren van de DISPID's, maar dan wilt toevoegen alles zelf, de functionaliteit is dus nog in MfcAxscrVb.

Met de verbeterde ondersteuning van IDL methoden en eigenschappen van Visual C++ 5. 0 via ClassView is een wegs omhoog of ClassWizard nodig is of niet. Maar MfcAxscrVb ondersteunt nu. Geniet van.

Bijlage a: objectmodel van

Schrijft:

Dit is het hoofd object waaruit alle andere objecten worden afgeleid. Het is "IMfcaxscrvbDlg" in het bestand .odl, maar als het benoemde Item is toegevoegd "Leerstof." Er is één methode, HostCreateObject, die hierboven is beschreven.

Knop objecten:

AButton BButton, CancelButton, OKButton, RunScript

Eigenschappen
  • Bijschrift: Tekst van het knopvlak.
MethodenPers: Fungeert als de knop heeft gedrukt.
  • Pers: Fungeert als de knop heeft gedrukt.
Gebeurtenissen
  • OnClick: Die optreedt wanneer de knop wordt gedrukt.
  • OnMouseOver: Die optreedt wanneer de muis aanwijzer over de knop.
  • OnFocus(bSet): Die optreedt wanneer de focus krijgt of knop onttrokken.
BroCon:

BroCon is de naam van het besturings element WebBrowser in het dialoog venster. Ondersteunt alle eigenschappen en methoden zoals beschreven in de Internet Client SDK/ActiveX De SDK voor het besturings element WebBrowser.

EditCon:

Methoden
  • AppendLine(strToAdd): Toegevoegd strToAdd tot het einde van het tekst venster bewerken.
  • InsertLine (strToAdd, /n/nwaarbij): strToAdd toegevoegd aan de regel #nWhere.
  • RemoveLine(nWhere): Lijn # nWhere uit bewerken venster verwijderd.
Gebeurtenissen
  • OnMouseOver: Die optreedt wanneer de muis aanwijzer over het venster.
  • OnChar(strChar): Die optreedt als strChar teken is ingevoerd in het venster.
  • OnFocus(bSet): Die optreedt wanneer de focus krijgt of knop onttrokken.
Lbox:

Methoden
  • AddString(strIn): StrIn toegevoegd in de keuze lijst.
  • ClearList: Hiermee wist u alle teken reeksen in keuze lijst.
  • RemoveString(strRemove): Eerste exemplaar van StrRemove worden verwijderd en verwijderd uit de keuze lijst.
  • SelectString(strSelect): Hiermee selecteert u teken reeks van strSelect.
Gebeurtenissen
  • OnMouseOver: Die optreedt wanneer de muis aanwijzer over het venster.
  • OnFocus(bSet): Die optreedt wanneer de focus krijgt of knop onttrokken.
  • OnSelCancel(strCancelled): Wanneer selectie geannuleerd in een keuze lijst element strCancelled.
  • OnSelChange(strChange): Wanneer een lijst in element strChange is geselecteerd door de gebruiker.

Eigenschappen

Artikel ID: 168214 - Laatste beoordeling: woensdag 23 februari 2011 - Wijziging: 2.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Foundation Class Library 4.2 op de volgende platformen
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
Trefwoorden: 
kbdownload kbfile kbinfo kbsample kbmt KB168214 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:168214
Vrijwaring inhoud KB-artikelen over niet langer ondersteunde producten
Dit artikel heeft betrekking op producten waarvoor Microsoft geen ondersteuning meer biedt. Daarom wordt dit artikel alleen in de huidige vorm aangeboden en wordt het niet meer bijgewerkt.

Geef ons feedback

 

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