CAPTURANDO EVENTOS GERADOS EM DLL¬šÃ€ŠÃ‚'S

USUARIO.EXCLUIDOS 18/05/2004 15:28:08
#25303
Olá amigos, estou com uma dúvida de como proceder quando coleto a resposta de um evento gerado por uma DLL, contruída por mim. Vou explicar: Acretido que muitos estão acostumados a programar criando rotinas que retornam status de OK ou não para tomar decisões dentro de uma sub por exemplo. Após um breve estudo, verifiquei que é possível gerar eventos a partir de uma classe. Muito bem, criei uma classe que em determinadas situações, dispara um evento que envia uma mensagem de erro. Bom instanciei a classe, consegui capturar o evento. Mas veja, o evento foi disparado em no meio de uma sub no form. Como foi um erro, eu não posso permitir que esta sub continua sendo executada. Ela precisa ser interrompida. Se eu estivesse utilzando uma função que retona-se verdadeiro ou falso, tudo bem eu saberia o que fazer. E no caso do EVENTO. Se alguém utiliza-se desta técnica, por favor gostaria de uma dica.

Valeu...
USUARIO.EXCLUIDOS 18/05/2004 15:35:19
#25308
Resposta escolhida
se o problema é o retorno de valor - voce pode declarar o evento com parametros - e dentro de sua classe, na hora de dar um RaiseEvent, você passa o valor que quer transmitir - mas se o problema é tratar como se fosse um erro para ser capturado pelo tratamento
On error goto / On error resume - da uma olhada em err.Raise - isso pode ser mais o que voce precisa
USUARIO.EXCLUIDOS 18/05/2004 15:37:04
#25311
Option Explicit

Private Sub Form_Load()
On Error GoTo trataerro
Dim i As Integer

i = 1
Err.Raise -231, "TESTE", "Teste de erro qualquer"
i = 2

trataerro:
MsgBox i

End Sub
USUARIO.EXCLUIDOS 18/05/2004 16:19:16
#25333
entao é exatamente o que te passei - vc pode chamar seu evento, mas chame também um err.Raise passando alguns parametros a seu gosto

vc estara em sua funcao executando a classe, se houver algum erro, vai disparar um evento de erro que voce captura com o On error - e pode tratar a vontade

Private Sub QualquerCoisa
On error goto trataerro

dim MyClasse = new ClasseErro

MyClasse.ExecutaFuncao
myClasse.ExecutaFuncao2
myClasse.ExecutaFuncao3

TrataErro:
end sub

desta forma se der problema em ExecutaFuncao2 por exemplo, ele sai da funcao sem executar a funcao 3
USUARIO.EXCLUIDOS 18/05/2004 16:51:48
#25343
se mesmo assim der erro - va em Tools - Options - Generel - Error Traping e mude para Break on Unhandled errors... caso contrário ele vai parar na linha Err.Raise apontando um erro

'em um formulario
Option Explicit

Private Sub Form_Load()
Dim Dividindo As Class1

On Error GoTo TrataErro

Set Dividindo = New Class1

Do
Debug.Print Dividindo.Dividir(Rnd * 10, Rnd * 10)
Loop

TrataErro:
MsgBox Err.Description
End Sub

'em uma classe
Option Explicit

Public Function Dividir(ByVal Numero1 As Integer, ByVal Numero2 As Integer) As Integer
If Numero2 0 Then
Dividir = Numero1 / Numero2
Else
Err.Raise 1234, "Classe1", "Divisão por Zero"
End If
End Function
Tópico encerrado , respostas não são mais permitidas