Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
robsoncoutinho Novato
Registrado: Terça-Feira, 16 de Julho de 2013 Mensagens: 24
|
Enviada: Ter Ago 06, 2013 2:22 pm Assunto: [RESOLVIDO] Problemas com passagem de parâmetros |
|
|
Boa tarde amigos,
Estou com um problema relacionado a passagem de parâmetros no Delphi, que é o seguinte:
Tenho um objeto TUsuario que descende de TObject, estou passando ele como parametro para essa procedura adicionarObjeto, e quando tento usar o objeto dentro da procedure da um erro access violation.
No debug o delphi me exibe o objeto da seguinte forma:
Watch Name | Value
objeto ()
Segue o link para codigo da procedure:
http://pastebin.com/TrJH11w0
Muito Obrigado a todos!
Editado pela última vez por robsoncoutinho em Sex Ago 09, 2013 11:48 am, num total de 1 vez |
|
Voltar ao Topo |
|
|
GustavoToyota Profissional
Registrado: Domingo, 9 de Outubro de 2011 Mensagens: 605 Localização: Sorocaba - SP
|
Enviada: Ter Ago 06, 2013 5:02 pm Assunto: |
|
|
Com essa parte do código não dá pra saber onde está o erro.
Debugue seu programa ou poste o source completo.
Abraços |
|
Voltar ao Topo |
|
|
robsoncoutinho Novato
Registrado: Terça-Feira, 16 de Julho de 2013 Mensagens: 24
|
Enviada: Ter Ago 06, 2013 6:29 pm Assunto: |
|
|
Aqui está o codigo que vai utilizar esse adicionarObjeto. É aqui no adicionar objeto que o objeto passado como parâmetro chega vazio, sem nada, e da erro access violation.
TUsuario é uma classe simples que herda de TObject.
http://pastebin.com/CwvRjTDY
Abraços, muito obrigado |
|
Voltar ao Topo |
|
|
robsoncoutinho Novato
Registrado: Terça-Feira, 16 de Julho de 2013 Mensagens: 24
|
Enviada: Qui Ago 08, 2013 10:18 am Assunto: |
|
|
UP! |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Ago 08, 2013 3:59 pm Assunto: |
|
|
Boa tarde,
Experimente colocar um BreakPoint na primeira linha da procedure adicionarObjeto e depois prossiga a execução pressionando F7 até que ocorra o erro para identificar em que linha ele ocorre.
Espero que ajude.
_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-em-guarulhos |
|
Voltar ao Topo |
|
|
robsoncoutinho Novato
Registrado: Terça-Feira, 16 de Julho de 2013 Mensagens: 24
|
Enviada: Qui Ago 08, 2013 5:08 pm Assunto: |
|
|
Boa tarde imex,
então ele ocorre na linha 5 da procedure adicionarObjeto.
chaveMapa := TChaveMapa.Create(objeto.ClassName, LerIdObjeto(objeto));
http://pastebin.com/TrJH11w0
Eu já debuguei, eu vi que a referência ao objeto que passei está chegando vazia. No depurador do delphi quando tento visualizar a valor do parametro objeto, ele aparece assim objeto: ().
Um detalhe importante é que o objeto que estou passando é um TUsuario que herda de TObject, o parametro eu tipei como TObject para que aceite qualquer objeto TObject como parametro ou descendentes, pelo menos essa era minha intenção.
Mas acho que o delphi não enxerga dessa maneira, estava pesquisando sobre casting e polimorfismo, seria que vou ter que fazer casting dentro do metodo?
Agora acho que deu uma luz a mais.
Abraço, muito obrigado |
|
Voltar ao Topo |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Ago 08, 2013 5:48 pm Assunto: |
|
|
Pra ser direto, desconfio que o erro está em alguma linha de código da função LerIdObjeto ou talvez no Constructor de TChaveMapa, por isso sugeri a você que adicionasse um BreakPoint nessa linha e depois continuasse a execução com F7, pois dessa forma será possível avançar a execução linha por linha de código.
Outra coisa que você poderia fazer é posicionar o ponteiro do mouse sobre a propriedade ClassName no momento em que a execução chegar ao BreakPoint para ver se o nome da classe é exibido corretamente.
Experimente fazer esses testes... |
|
Voltar ao Topo |
|
|
robsoncoutinho Novato
Registrado: Terça-Feira, 16 de Julho de 2013 Mensagens: 24
|
Enviada: Qui Ago 08, 2013 7:42 pm Assunto: |
|
|
O erro está ocorrendo na lerIdObjeto mesmo, você tem razão.
Fiz um teste passando um inteiro direto sem chamar a função e correu tudo certo. Ele pego o ClassName certo TUsuario.
Ai retornei e debuguei com f7 e encontrei a linha que realmente ocorre.
O codigo da function ta aqui:
http://pastebin.com/QRk8hXxG
O erro está dando na linha 11 da function.
typeRtti := ctxRtti.GetType(objeto);
Nessa hora que da a mensagem de access violation.
O que será que pode estar ocorrendo?
Muito obrigado brother, abraço!! |
|
Voltar ao Topo |
|
|
robsoncoutinho Novato
Registrado: Terça-Feira, 16 de Julho de 2013 Mensagens: 24
|
Enviada: Sex Ago 09, 2013 11:47 am Assunto: |
|
|
Problema resolvido.
O parâmetro que eu estava passando para o ctxRtti.GetType não estava correto. Eu estava passando a referência do objeto e não objeto.ClassType. Agora está tudo certo.
Falta de atenção minha e uma ajuda do delphi que compilou e não falou nada né... rs
Muito obrigado à todos que contribuíram e me ajudaram, valeu mesmo.
Abraço ae!! |
|
Voltar ao Topo |
|
|
|