Dica de design: criando um servidor genérico
Para quem desenvolve aplicações em múltiplas camadas usando ActiveX executável como servidor, é possível ter um servidor genérico que simplesmente instancia objetos na camada servidora e repassa as solicitações do cliente a estes objetos. Uma forma de criar este mecanismo de repasse é ter no objeto servidor um método do tipo OperarObjeto, que recebe como argumento o ProgId (nome do projeto . nome da classe) do objeto a ser criado e um variant contendo uma matriz com os dados a serem manipulados pelo objeto. De posse do ProgId, o servidor instancia o objeto usando a função CreateObject e repassa os dados para um método comum a todos os objetos usados neste tipo de operação. Como retorno padrão, o servidor receberia um variant contendo os dados a retornar para o cliente. Veja abaixo um exemplo disto.
Public Function OperarObjeto(ByVal strProgId as String, _
ByVal Dados as Variant) As Variant
Dim Obj as Object
On Error GoTo TrataErro
Set Obj = CreateObject(strProgId)
OperarObjeto = Obj.TratarDados( Dados )
Set Obj = Nothing
Exit Function
TrataErro:
OperarObjeto= Err.Number & " " & _
Err.Description & vbLF & _
"Servidor_OperarObjeto "
Exit Function
No exemplo acima, os objetos criados com strProgId têm um método comum TratarDados, que tem nos dados recebidos as informações de qual operação executar. Retornam as informações que o cliente deve receber como resultado de uma operação bem ou mal sucedida. O cliente examina o retorno e trata algum possível erro que o objeto esteja retornando.