Partilhar via


Mapas de Despacho

Observação

A biblioteca Microsoft Foundation Classes (MFC) continua a ser suportada. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.

A Automação OLE fornece formas de chamar métodos e aceder a propriedades entre aplicações. O mecanismo fornecido pela Microsoft Foundation Class Library para despachar estes pedidos é o "dispatch map", que designa os nomes internos e externos das funções e propriedades do objeto, bem como os tipos de dados das próprias propriedades e dos argumentos da função.

Macro do mapa de despacho Description
DECLARE_DISPATCH_MAP Declara que um mapa de despacho será usado para expor os métodos e propriedades de uma classe (deve ser usado na declaração da classe).
BEGIN_DISPATCH_MAP Começa a definição de um mapa de despacho.
END_DISPATCH_MAP Termina a definição de um mapa de despacho.
DISP_FUNCTION Usado num mapa de despacho para definir uma função de automação OLE.
DISP_PROPERTY Define uma propriedade de automação OLE.
DISP_PROPERTY_EX Define uma propriedade de automação OLE e nomeia as funções Get e Set.
DISP_PROPERTY_NOTIFY Define uma propriedade de automação OLE com notificação.
DISP_PROPERTY_PARAM Define uma propriedade de automação OLE que toma parâmetros e nomeia as funções Get e Set.
DISP_DEFVALUE Faz de uma propriedade existente o valor padrão de um objeto.

DECLARE_DISPATCH_MAP

Se uma CCmdTargetclasse derivada em - no seu programa suportar Automação OLE, essa classe deve fornecer um mapa de despacho para expor os seus métodos e propriedades.

DECLARE_DISPATCH_MAP()

Observações

Usa a macro DECLARE_DISPATCH_MAP no final da tua declaração de aula. Depois, no . O ficheiro CPP que define as funções membros da classe, utiliza a macro BEGIN_DISPATCH_MAP. Depois inclui entradas macro para cada um dos métodos e propriedades expostos da tua classe (DISP_FUNCTION, DISP_PROPERTY, e assim sucessivamente). Por fim, usa a macro END_DISPATCH_MAP.

Observação

Se declarar algum membro após DECLARE_DISPATCH_MAP, deve especificar um novo tipo de acesso ( public, private, ou protected) para eles.

O Assistente de Aplicações e os assistentes de código auxiliam na criação de classes de Automação e na manutenção dos mapas de despacho. Para mais informações sobre mapas de despacho, consulte Servidores de Automação.

Example

class CMyServerDoc : public COleServerDoc
{
   DECLARE_DISPATCH_MAP()

   // Remainder of class declaration omitted.

Requerimentos

Cabeçalho: afxwin.h

BEGIN_DISPATCH_MAP

Declara a definição do seu mapa de despacho.

BEGIN_DISPATCH_MAP(theClass, baseClass)

Parâmetros

a Classe
Especifica o nome da classe que possui este mapa de despacho.

Classe base
Especifica o nome base da classe theClass.

Observações

No ficheiro de implementação (.cpp) que define as funções membros da sua classe, inicie o mapa de despacho com a macro BEGIN_DISPATCH_MAP, adicione entradas de macro para cada uma das suas funções e propriedades de despacho, e complete o mapa de despacho com a macro END_DISPATCH_MAP.

Requerimentos

Cabeçalho: afxdisp.h

END_DISPATCH_MAP

Termina a definição do teu mapa de despacho.

END_DISPATCH_MAP()

Observações

Deve ser usado em conjunto com BEGIN_DISPATCH_MAP.

Requerimentos

Cabeçalho: afxdisp.h

DISP_FUNCTION

Define uma função de automação OLE num mapa de despacho.

DISP_FUNCTION(
    theClass,
    pszName,
    pfnMember,
    vtRetVal,
    vtsParams)

Parâmetros

a Classe
Nome da classe.

pszName
Nome externo da função.

pfnMember
Nome da função do membro.

vtRetVal
Um valor que especifica o tipo de retorno da função.

vtsParams
Uma lista separada em espaço de uma ou mais constantes que especifica a lista de parâmetros da função.

Observações

O argumento vtRetVal é do tipo VARTYPE. Os seguintes valores possíveis para este argumento são retirados da VARENUM enumeração:

Symbol Tipo de retorno
VT_EMPTY void
VT_I2 short
VT_I4 long
VT_R4 float
VT_R8 double
VT_CY CY
VT_DATE DATE
VT_BSTR BSTR
VT_DISPATCH LPDISPATCH
VT_ERROR SCODE
VT_BOOL BOOL
VT_VARIANT VARIANT
VT_UNKNOWN LPUNKNOWN

O argumento vtsParams é uma lista separada em espaço de valores das VTS_* constantes. Um ou mais destes valores, separados por espaços (não vírgulas), especifica a lista de parâmetros da função. Por exemplo

VTS_I2 VTS_PI2

especifica uma lista contendo um inteiro curto seguido de um ponteiro para um inteiro curto.

As VTS_ constantes e os seus significados são os seguintes:

Symbol Tipo de parâmetro
VTS_I2 short
VTS_I4 long
VTS_R4 float
VTS_R8 double
VTS_CY const CY ou CY*
VTS_DATE DATE
VTS_BSTR LPCSTR
VTS_DISPATCH LPDISPATCH
VTS_SCODE SCODE
VTS_BOOL BOOL
VTS_VARIANT const VARIANT* ou VARIANT&
VTS_UNKNOWN LPUNKNOWN
VTS_PI2 curto*
VTS_PI4 longo*
VTS_PR4 flutuar*
VTS_PR8 Duplo*
VTS_PCY CY*
VTS_PDATE DATE*
VTS_PBSTR BSTR*
VTS_PDISPATCH LPDISPATCH*
VTS_PSCODE SCODE*
VTS_PBOOL BOOL*
VTS_PVARIANT VARIANT*
VTS_PUNKNOWN LPUNKNOWN*
VTS_NONE Sem parâmetros

Requerimentos

Cabeçalho: afxdisp.h

DISP_PROPERTY

Define uma propriedade de automação OLE num mapa de despacho.

DISP_PROPERTY(
    theClass,
    pszName,
    memberName,
    vtPropType)

Parâmetros

a Classe
Nome da classe.

pszName
Nome externo da propriedade.

Nome do Membro
Nome da variável membro na qual a propriedade está armazenada.

vtPropType
Um valor que especifica o tipo da propriedade.

Observações

O argumento vtPropType é do tipo VARTYPE. Os valores possíveis para este argumento são retirados da enumeração VARENUM:

Symbol Tipo de propriedade
VT_I2 short
VT_I4 long
VT_R4 float
VT_R8 double
VT_CY CY
VT_DATE DATE
VT_BSTR CString
VT_DISPATCH LPDISPATCH
VT_ERROR SCODE
VT_BOOL BOOL
VT_VARIANT VARIANT
VT_UNKNOWN LPUNKNOWN

Quando um cliente externo altera a propriedade, o valor da variável membro especificada por memberName muda; Não há qualquer notificação da alteração.

Requerimentos

Cabeçalho: afxdisp.h

DISP_PROPERTY_EX

Define uma propriedade de automação OLE e nomeia as funções usadas para obter e definir o valor da propriedade num mapa de despacho.

DISP_PROPERTY_EX(
    theClass,
    pszName,
    memberGet,
    memberSet,
    vtPropType)

Parâmetros

a Classe
Nome da classe.

pszName
Nome externo da propriedade.

obterMembro
Nome da função de membro usada para obter a propriedade.

Conjunto de membros
Nome da função de membro usada para definir a propriedade.

vtPropType
Um valor que especifica o tipo da propriedade.

Observações

As funções memberGet e memberSet têm assinaturas determinadas pelo argumento vtPropType . A função memberGet não aceita argumentos e devolve um valor do tipo especificado por vtPropType. A função memberSet toma um argumento do tipo especificado por vtPropType e não retorna nada.

O argumento vtPropType é do tipo VARTYPE. Os valores possíveis para este argumento são retirados da enumeração VARENUM. Para uma lista destes valores, consulte as Observações para o parâmetro vtRetVal em DISP_FUNCTION. Note que VT_EMPTY, listado nas DISP_FUNCTION observações, não é permitido como tipo de dado de propriedade.

Requerimentos

Cabeçalho: afxdisp.h

DISP_PROPERTY_NOTIFY

Define uma propriedade de automação OLE com notificação num mapa de despacho.

DISP_PROPERTY_NOTIFY(
    theClass,
    szExternalName,
    memberName,
    pfnAfterSet,
    vtPropType)

Parâmetros

a Classe
Nome da classe.

szExternalName
Nome externo da propriedade.

Nome do Membro
Nome da variável membro na qual a propriedade está armazenada.

pfnAfterSet
Nome da função de notificação para szExternalName.

vtPropType
Um valor que especifica o tipo da propriedade.

Observações

Ao contrário das propriedades definidas com DISP_PROPERTY, uma propriedade definida com DISP_PROPERTY_NOTIFY chamará automaticamente a função especificada por pfnAfterSet quando a propriedade for alterada.

O argumento vtPropType é do tipo VARTYPE. Os valores possíveis para este argumento são retirados da enumeração VARENUM:

Symbol Tipo de propriedade
VT_I2 short
VT_I4 long
VT_R4 float
VT_R8 double
VT_CY CY
VT_DATE DATE
VT_BSTR CString
VT_DISPATCH LPDISPATCH
VT_ERROR SCODE
VT_BOOL BOOL
VT_VARIANT VARIANT
VT_UNKNOWN LPUNKNOWN

Requerimentos

Cabeçalho: afxdisp.h

DISP_PROPERTY_PARAM

Define uma propriedade acedida com funções separadas Get e Set membro.

DISP_PROPERTY_PARAM(
    theClass,
    pszExternalName,
    pfnGet,
    pfnSet,
    vtPropType,
    vtsParams)

Parâmetros

a Classe
Nome da classe.

pszExternalName
Nome externo da propriedade.

pfnGet
Nome da função de membro usada para obter a propriedade.

pfnSet
Nome da função de membro usada para definir a propriedade.

vtPropType
Um valor que especifica o tipo da propriedade.

vtsParams
Uma sequência de tipos de parâmetros variantes separados VTS_* no espaço, um para cada parâmetro.

Observações

Ao contrário da macro DISP_PROPERTY_EX, esta macro permite especificar uma lista de parâmetros para a propriedade. Isto é útil para implementar propriedades indexadas ou parametrizadas.

Example

Considere a seguinte declaração das funções membros get e set que permitem ao utilizador solicitar uma linha e coluna específicas ao aceder à propriedade:

SHORT GetArray(SHORT row, SHORT column);
void SetArray(SHORT row, SHORT column, SHORT newVal);

Estes correspondem ao seguinte DISP_PROPERTY_PARAM macro no mapa de despacho de controlo:

DISP_PROPERTY_PARAM(CMFCActiveXControlCtrl, "Array", GetArray, SetArray, VT_I2, VTS_I2 VTS_I2)

Como outro exemplo, considere as seguintes funções membros get e set:

IDispatch* GetItem(SHORT index1, SHORT index2, SHORT index3);
void SetItem(SHORT index1, SHORT index2, SHORT index3, IDispatch* pVal);

Estes correspondem ao seguinte DISP_PROPERTY_PARAM macro no mapa de despacho de controlo:

DISP_PROPERTY_PARAM(CMFCActiveXControlCtrl, "Item", GetItem, SetItem, VT_DISPATCH, VTS_I2 VTS_I2 VTS_I2)

Requerimentos

Cabeçalho: afxdisp.h

DISP_DEFVALUE

Faz de uma propriedade existente o valor padrão de um objeto.

DISP_DEFVALUE(theClass, pszName)

Parâmetros

a Classe
Nome da classe.

pszName
Nome externo da propriedade que representa o "valor" do objeto.

Observações

Usar um valor por defeito pode tornar a programação do seu objeto de automação mais simples para aplicações Visual Basic.

O "valor padrão" do seu objeto é a propriedade que é recuperada ou definida quando uma referência a um objeto não especifica uma propriedade ou função membro.

Requerimentos

Cabeçalho: afxdisp.h

Consulte também

Macros e Globais