CAPTURANDO EVENTOS GERADOS EM DLL¬šÃ€ŠÃ‚'S
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...
Valeu...
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
On error goto / On error resume - da uma olhada em err.Raise - isso pode ser mais o que voce precisa
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
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
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
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
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
'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