EXEMPLO: MFCAxs.exe implementa um script Host Active Directory utilizando MFC

Traduções de Artigos Traduções de Artigos
Artigo: 168214 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

MFCAxs.exe é um exemplo contém MfcAxscrVb. MfcAxscrVb é um anfitrião de scripts activos de exemplo com instruções escrito utilizando MFC. -Hospeda a DLL de VBScript; no entanto, os mecanismos de processamento de scripts activo genéricos para qualquer motor de processamento de scripts activos. MfcAxscrVb mostra apenas uma forma possível de fornecem objectos de despacho do anfitrião, para implementar interfaces de processamento de scripts activo do anfitrião e ligar as mensagens do windows no anfitrião com eventos desencadeados o motor de script.

MfcAxscrVb inclui um ficheiro de área de trabalho e projecto de Visual C++ 5.0. Apesar de nenhum VC ++ 4.2 makefile compatível ou mdpfile é fornecido, o código de origem para MfcAxscrVb é compatível com MFC 4.2b.

Pré-requisitos: COM automatização

Mais Informação

O ficheiro seguinte está disponível para transferência a partir do Centro de transferências da Microsoft:
MFCAxs.exe
Para obter informações adicionais sobre como transferir ficheiros de suporte da Microsoft, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
119591Como obter ficheiros de suporte da Microsoft a partir de serviços on-line
Microsoft procedeu de vírus neste ficheiro. Microsoft utilizou o mais recente software de detecção de vírus que estava disponível na data em que o ficheiro foi publicado. O ficheiro é alojado em servidores com segurança avançada que o ajudam a impedir alterações não autorizadas ao ficheiro.

Executar o exemplo

Quando executar o exemplo de MfcAxscrVb notará um controlo de edição grande no canto superior esquerdo da aplicação. Pode colar ou script de tipo para esta janela e seleccione "Executar script" botão para invocar o script. Vários scripts de teste são fornecidos nos ficheiros Script.txt e Testevents.txt.

Expor o sistema anfitrião: objectos de envio

O foco principal para este exemplo é a implementação de objectos de distribuição utilizando MFC. O motivo para isto é simples. Uma linguagem de scripts não é muito utilizado se não houver nada para script.

A tecnologia principal no qual todos os scripts activos depende é a maior parte dos certamente de automatização. Conhecimento prático de sólida da automatização de for absolutamente necessário antes de tentar o código de qualquer anfitrião de scripts activos. Existem várias referências boas para automatização: capítulos 14 e 15 de "Inside OLE do Brockshmidt," capítulo 11 do Dale Rogerson "no interior COM" e "Referência para programadores de automatização OLE".

CCmdTargetPlus:

O que necessita são alguns objectos que permitem scripts propriedades e métodos através de IDispatch mas também geram scripts de eventos. MFC não definitivamente a maior parte do trabalho grunt quando implementar interfaces de despacho para um objecto COM. No entanto, a única classe MFC que suporta ambas as interfaces de despacho entrada e saída interfaces de despacho ou "event sinks", é COleControl. COleControl é muito demasiado bulky para que pretende. Apenas pretende eventos, uma interface de despacho e escreva informações. VBScript necessita de ler informações de tipo para objectos de distribuição que suportam eventos. Pode criar este compor uma mensagem, ou criar uma biblioteca tipo estático para distribuição objectos o anfitrião e obter ITypeInfo para cada objecto individual.

Enquanto provavelmente não for necessário, MfcAxscrVb tem uma classe base denominada CCmdTargetPlus suporta estes três partes: pontos de ligação com um mapa de evento de estilo de controlo e informações de tipo facilmente acessíveis através de IProvideClassInfo, de interface de despacho. A maioria do código CmdTargetPlus foi adicionada para permitir para mapas de eventos, que permite adicionar eventos derivada classes muito mais fácil.

objectos de despacho:

Todos os objectos fornecidos pelo anfitrião distribuição são implementados utilizando CCmdTargetPlus. Existem alguns aspectos que precisa fazer para funcionar bem. Consulte qualquer um dos objectos de distribuição (CAButtonDispatch CBButtonDispatch e por aí em diante) para um padrão em que é necessário. Uma breve rundown no modelo de objecto do MfcAxscrvb é listado no final deste documento.

Se adicionar os seus próprios objectos, deve verificar para três GUID exclusivos para o despacho principal e interfaces de eventos principal e para o clsid para o objecto na soma. Isto deverá ser efectuada no ficheiro de implementação e no ficheiro .odl. Ajuda (cortar e colar a aqui.) Cortar e colar todas as macros do Assistente de classe e, em seguida, alterá-las para o novo nome de classe. Assistente de classe é muito específico, mas se seguir tudo apenas direita nas .odl, .h e .cpp ficheiros, pode utilizar para adicionar novos eventos, propriedades e métodos para a distribuição de objecto como se fosse um MFC controlo OLE. Isto é útil de ordenar.

MfcAxscrVb mantém o objecto que implementa os mecanismos de despacho separados do objecto MFC, que na realidade se refere a. Por exemplo, a caixa de diálogo tem um botão denominado de "AButton," que é composta por scripts. O objecto de botão MFC é CButton. Classe derivada de CCmdTargetPlus, CAButtonDispatch, é separada e distintas. Este é um ponto de chave. Apenas o que o Programador de anfitrião explicitamente optar expor para objectos MFC básicos e controlos do Windows será scripts.

CEventsButton, CEventsEdit, CeventsListBox:

Para eventos, existe tem de ter algum código que responde a um Windows evento--dizer, clique num botão--e gera um evento para o motor de script. (Lembre-se de que um evento é uma distribuição Invoke numa interface processada por pontos de ligação no objecto de anfitrião.) Este exemplo realiza esta adicionando padrão MFC mensagem processadores para derivam as várias classes de objectos. Apenas cada um destes processadores tem de chamar FireEvent (por cortesia de código à CCmdTargetPlus) no objecto de distribuição. Tudo o resto acontece automaticamente.

Uma vez que o objecto de distribuição e o objecto de janela MFC real são separadas neste exemplo, o principal de diálogo necessita explicitamente ligar as duas em conjunto. Isto é feito no construtor Mfcaxscrvbdlg.

Itens com nome

Depois de objectos de distribuição, tem de defini-los para que o motor de script sabe sobre os mesmos. O conjunto de todos os objectos despacho nomeado que conhece o motor de script é designado por "Namespace Script". Itens são adicionados ao espaço de nomes de scripts através do método IActiveScript::AddNamedItem. À medida que foi mencionado anteriormente, é imposto o anfitrião para implementar um IDispatch para o objecto e tipo de informações sobre a ITypeInfo o suporte para o objecto. Quando o motor de script necessita de resolver uma referência a um item com nome, utiliza o método de IActiveScriptSite::GetItemInfo para pedir um apontador IUnknown (que consulta principalmente para IDispatch) e um ponteiro ITypeInfo.

Não tudo o que quer ser scripts um anfitrião tem de ser um item com nome. Normalmente, o anfitrião tem uma hierarquia de objectos, onde sub-objects estão acessíveis através de um objecto de nível superior. Um metaphor comum é a aplicação-> documento-> hierarquia de produto, onde o objecto de documento é acessível a partir do objecto de aplicação de nível superior como propriedade IDispatch do próprio objecto aplicação. Da mesma forma, o próprio objecto documento expõe vários sub-objects e cada é um produto que pode obter através de uma matriz de produto ou outro contrivance.

Utilizando este esquema, o motor de script é suficientemente inteligente para navegar para um subitem quando o código de script indica o seguinte sem necessitar de documento ou item a adicionar ao espaço de nomes de script:
Set Obj = Application.Document.Item(1)
				
desde que o sub-objects são expostos como obter as propriedades do respectivo objecto principal, o motor de script encontra com êxito. Interestingly suficiente, o motor de script é capaz de "assumir" o item de nível superior na hierarquia. O que isto significa que se a aplicação é declarada como o item de nível superior, em seguida, é suficiente dizer o seguinte para o código de script anterior:
Set Obj = Document.Item(1)
				
trata-se exactamente como Internet Explorer 3.0 permite ao código de script no contexto do objecto Window sem prefixo sempre todas as referências a objectos com "Janela". Um anfitrião de script tem de identificar o produto script de nível superior na chamada para AddNamedItems utilizando o sinalizador SCRIPTITEM_GLOBALMEMBERS. O que normalmente não é feito desmarque documentação de processamento de scripts activo, no entanto, é denominado apenas itens pode suportar eventos. Utilizando o exemplo acima, existe não sintaxe para dizer o seguinte procedimento para processar um evento num determinado item:
   Sub Application.Document.Item(1)_OnEvent ' this doesn't work!
				
SO, para MfcAxscrvbdlg, uma vez que pretendemos conseguir processar os eventos de todos os objectos na hierarquia, todos os objectos é adicionado como um item com o nome. Cada objecto também está acessível através de nível superior Scripter objecto (a caixa de diálogo próprio), que não suporta actualmente eventos.

controlo WebBrowser:

Neste exemplo, o script anfitrião expõe apenas um objecto externo para o espaço de nomes script. Este é o controlo WebBrowser hospedado na caixa de diálogo predefinido controlo contenção suporte do MFC. Tudo o que precisa é um AddRef teria de despacho ponteiro para o controlo e estiver a definir. Para eventos, o objecto externo tem de expor um ponteiro ITypeInfo alguma forma. MfcAxscrVb obtém isto através de IProvideClassInfo::GetClassInfo. Como último recurso, um anfitrião poderia ler informações o objecto de tipo para expor um ITypeInfo. Felizmente, o controlo WebBrowser suporta GetClassInfo, por isso MfcAxscrVb não efectuar este procedimento.

Se pretender adicionar outros objectos de automatização externa ao espaço de nomes, tudo o que normalmente é necessário é obter uma interface, IUnknown utilizando CoCreateInstance. Em alternativa, o anfitrião pode suportar um meio genérico para obter os objectos externos, albeit aqueles que não necessita de tem eventos processados. No Visual Basic, a função para efectuar este procedimento denomina-se CreateObject.

Obter outras aplicações: HostCreateObject

Diferente do conjunto de propriedades utilizadas para expor todos os objectos subordinados, o objecto de criador de scripts principal (o diálogo própria classe) expõe apenas um método especial. Este método demonstra que uma simples significa para simulação CreateObject função do VB. Tenha em atenção que o método chama HostCreateObject para realçar que este método não é fornecido gratuitamente pelo motor de script, mas o anfitrião tem de implementar-próprio. Alguns sistemas anfitriões claramente não pretender fornecer esta capacidade para motivos de segurança, IE3 é um exemplo principal. O objectivo principal do HostCreateObject é devolver o ponteiro de despacho do objecto pedido. Depois do motor de script tem o ponteiro de distribuição, sabe o que fazer a partir daí.

Nota : como da versão 2.0, os motores VBScript e JScript suportam agora CreateObject como uma função incorporada. O anfitrião não é necessário implementar esta função. Esta função, no entanto, testará um objecto para se certificar de que é seguro para scripts antes de permitir que o objecto a ser utilizado. Objectos deem próprios seguro para scripts pelo suporte a interface IObjectSafety ou marcar as entradas de registo de categoria de componentes adequadas para segurança de scripts. Fazer referência à base de dados de conhecimento da Microsoft para obter mais informações.

Suporte de Assistente de classe

O último bit pouco de fraude em MfcAxscrVb é manipulações efectuadas suporta ClassWizard. Assistente de classe, tecnicamente não "dumb." Apenas mentally é solicitado. É bastante útil para o que faz, mas lembre-se que apenas blindly procura ficheiros procurar esses comentários ClassWizard especiais. Se seguir o formato para COleControl, pode apenas sobre obter imediatamente com a utilização do ClassWizard automatização e eventos separadores.

Um complication é que MfcAxscrVb utiliza derivação em algumas da respectiva hierarquia de objectos. Todos os objectos botão derivam de um objecto CButtonDispatch comuns que expõe propriedades e métodos, que é individualmente suportaria. No entanto, quando for necessário preencher ficheiros .odl, cada objecto individual tem de conter todas as propriedades e métodos da classe principal. Needless para dizer, este vai confundir a classe assistente quando for necessário numerar os DISPID. Se utilizar o Assistente de classe, certifique-se de dupla DISPID gerado em dois locais: o ficheiro .odl para a classe de automatização e a enumeração dentro de definição de classe. Quando trabalhar com as classes derivadas botão, é fácil de ver o mesmo DISPID atribuído a várias propriedades e métodos. É muito mais fácil corrigir DISPID, apesar do que para adicionar tudo, início, por isso, a funcionalidade foi deixada na MfcAxscrVb.

Com suporte melhorado 5.0 Visual C++, IDL métodos e propriedades através de exibir classe, é um toss até se ClassWizard é necessária ou não. Mas MfcAxscrVb o suporta por agora. Divirta-se.

Apêndice A: modelo de objecto

scripter:

Este é o objecto principal a partir da qual derivam todos os outros objectos. É "IMfcaxscrvbDlg" no ficheiro .odl mas é adicionado como item com o nome "Scripter." Tem um método, HostCreateObject, que é descrita acima.

botão objectos:

AButton BButton, RunScript CancelButton, OKButton,

Propriedades
  • Legenda: Texto da imagem do botão.
métodos Prima: Agir como se o botão foram eliminado.
  • Prima: Agir como se o botão foram eliminado.
eventos
  • AoFazerClique: Desencadeado quando o botão é premido.
  • OnMouseOver: Desencadeado quando o rato rola através de botão.
  • OnFocus(bSet): Desencadeado quando o foco é atribuído ou retirado do botão.
BroCon:

BroCon é o nome do controlo WebBrowser na caixa de diálogo. Suporta todas as propriedades e métodos de acordo com o SDK do Internet Client SDK/ActiveX para o controlo do WebBrowser.

EditCon:

métodos
  • AppendLine(strToAdd): Adiciona strToAdd ao fim da janela de texto de edição.
  • InsertLine (strToAdd, nWhere): Adiciona strToAdd na linha #nWhere.
  • RemoveLine(nWhere): Remove o # nWhere de linha da janela de edição.
eventos
  • OnMouseOver: É desencadeado quando rato rola através de janela.
  • OnChar(strChar): Desencadeado quando o carácter strChar é introduzida na janela.
  • OnFocus(bSet): Desencadeado quando o foco é atribuído ou retirado do botão.
Lbox:

métodos
  • AddString(strIn): Adiciona StrIn na caixa de listagem.
  • ClearList: Limpa todas as cadeias a partir da caixa de listagem.
  • RemoveString(strRemove): Remove a primeira ocorrência do StrRemove e remove-a partir da caixa de listagem.
  • SelectString(strSelect): Selecciona a cadeia especificada pela strSelect.
eventos
  • OnMouseOver: É desencadeado quando rato rola através de janela.
  • OnFocus(bSet): Desencadeado quando o foco é atribuído ou retirado do botão.
  • OnSelCancel(strCancelled): Quando selecção é cancelada num strCancelled de elemento de caixa de lista.
  • OnSelChange(strChange): Quando um strChange de elemento de caixa de lista é seleccionada pelo utilizador.

Propriedades

Artigo: 168214 - Última revisão: 10 de fevereiro de 2014 - Revisão: 2.2
A informação contida neste artigo aplica-se a:
  • 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 nas seguintes plataformas
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
Palavras-chave: 
kbnosurvey kbarchive kbmt kbdownload kbfile kbinfo kbsample KB168214 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 168214

Submeter comentários

 

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