Definindo a Interface padrão


Quando desejamos expor um componente .NET para o mundo COM, ele deve ter algumas configurações extras em relação aos componentes que são utilizados somente por aplicações .NET.

Uma das configurações necessárias é definirmos o atributo ClassInterfaceAttribute à classe que será acessada via COM. Esse atributo determinará qual será interface que será exposta para que o mundo COM possa consumí-la. O construtor deste atributo recebe como parametro um dos valores contidos no enumerador ClassInterfaceType. Quando o definimos com o valor ClassInterfaceType.None, indicará que a criação da Interface será fornecida por nós. Neste caso, ao registrar o componente com o Type Library Exporter (Tlbexp.exe), o mesmo será exposto com a primeira interface pública visível encontrada pelo utilitário, definindo assim, a interface padrão do componente para o mundo COM.

Mas e quando existerem mais que uma Interface no componente e, por algum motivo, queremos expor não a primeira Interface pública visível, mas a segunda ou a terceira. A versão 2.0 do .NET Framework introduz um novo atributo chamado ComDefaultInterfaceAttribute que, podemos expecificá-lo no componente. Em seu construtor, devemos especificar a Interface (através de um objeto Type) padrão para o mundo COM. O exemplo abaixo exemplifica o componente decorado com este atributo:

[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(ILogin)]
public class AuthenticationServices : IData, ILogin
{
     //Implementação…
}

Para consumir o componente no mundo COM, podemos fazer (exemplo em VB6):

[ Sem o atributo ComDefaultInterface ]
Dim authService As New AuthenticationServices
Dim login As ILogin
Set login = authService

authService.Update()
MsgBox login.Validate(“IA”, “Pa$$w0rd”)

[ Com o atributo ComDefaultInterface ]
Dim authService As New AuthenticationServices
Dim data As IData
Set data = authService

MsgBox authService.Validate(“IA”, “Pa$$w0rd”)
data.Update()

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s