Zusammenfassung der Ressource
DCOM4.2.2 LINGUAGEM DE DEFINIÇÃO DE
INTERFACE
- é um mecanismo formal utilizado pelo COM para descrever o conjunto de métodos suportados
por uma interface
- Interface Definition Language" - IDL
- desenvolvida pelo "Open Software
Foundation's Distributed Computing
Environment" (OSF DCE)
- VTABLE
- Um determinado cliente
possui o ponteiro de
interface (A) para essa
interface (I)
- ponteiro de interface (A)
aponta, na realidade, para
um ponteiro (B) dentro do
objeto
- ponteiro (B), por sua vez,
aponta para uma tabela
(vtable) que contém ponteiros.
possui um ponteiro para cada
método contido nessa interface
(M1, M2, M3, M4, M5, M6)
- Quando um cliente invoca
um método da interface a
estrutura de ponteiros é
percorrida e o método
correto é executado
- INTERFACE
FUNDAMENTAL IUnknown
- QueryInterface
- possibilita ao cliente
obter o ponteiro de uma
outra interface do objeto
- O primeiro ponteiro de interface
para um objeto pode ser adquirido
por um cliente quando, por
exemplo, ele o cria
- Uma vez obtido este ponteiro
inicial, o cliente, através do
método QueryInterface, é capaz
de adquirir os demais ponteiros
de interfaces cujos métodos ele
necessite invocar
- AddRef/Release
- quando um cliente deseja
utilizar um objeto, ele deve
instanciá-lo explicitamente, mas
não poderá destruir esta
instância diretamente
Anmerkungen:
- Isto ocorre porque ao dar início a um objeto, ele adquire um ponteiro de
uma de suas interfaces o qual poderia ter sido passado para outro cliente
- ao dar início a um objeto, ele
adquire um ponteiro de uma
de suas interfaces o qual
poderia ter sido passado para
outro cliente
- segundo cliente pode usar
esse ponteiro (recebido do
primeiro cliente) para invocar
um método do mesmo objeto,
podendo também repassá-lo
para um terceiro cliente e
assim por diante
- Cada objeto COM mantém um contador de referência. Sempre que o objeto
passar adiante um ponteiro para uma de suas interfaces, ele soma 1 ao seu
contador de referência (na verdade o objeto mantém um contador de
referência para cada uma das interfaces do objeto). Se um cliente passa um
ponteiro de interface para um outro cliente, aquele que o recebe deve
invocar o método AddRef através deste ponteiro. Isto faz com que o objeto
incremente seu contador de referência. Indiferentemente de como um
cliente adquiriu este ponteiro, ele deve sempre invocar o método Release,
através deste ponteiro, quando não necessitar mais dele. A execução deste
método causa um decremento do contador de referência deste objeto. O
objeto, usualmente, se destrói quando o contador de referência chega a
zero.