ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

[RESOLVIDO] Problemas com passagem de parâmetros

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
robsoncoutinho
Novato
Novato


Registrado: Terça-Feira, 16 de Julho de 2013
Mensagens: 24

MensagemEnviada: Ter Ago 06, 2013 2:22 pm    Assunto: [RESOLVIDO] Problemas com passagem de parâmetros Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
GustavoToyota
Profissional
Profissional


Registrado: Domingo, 9 de Outubro de 2011
Mensagens: 605
Localização: Sorocaba - SP

MensagemEnviada: Ter Ago 06, 2013 5:02 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
robsoncoutinho
Novato
Novato


Registrado: Terça-Feira, 16 de Julho de 2013
Mensagens: 24

MensagemEnviada: Ter Ago 06, 2013 6:29 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
robsoncoutinho
Novato
Novato


Registrado: Terça-Feira, 16 de Julho de 2013
Mensagens: 24

MensagemEnviada: Qui Ago 08, 2013 10:18 am    Assunto: Responder com Citação

UP!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Ago 08, 2013 3:59 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
robsoncoutinho
Novato
Novato


Registrado: Terça-Feira, 16 de Julho de 2013
Mensagens: 24

MensagemEnviada: Qui Ago 08, 2013 5:08 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Ago 08, 2013 5:48 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
robsoncoutinho
Novato
Novato


Registrado: Terça-Feira, 16 de Julho de 2013
Mensagens: 24

MensagemEnviada: Qui Ago 08, 2013 7:42 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
robsoncoutinho
Novato
Novato


Registrado: Terça-Feira, 16 de Julho de 2013
Mensagens: 24

MensagemEnviada: Sex Ago 09, 2013 11:47 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB