RES: [delphi-br] Problema com interfaces.
[***] Estou tentando trabalhar com interfaces, mas ta complicado. Tenho MinhaInterface=interface function GetNome:String; procedure SetNome(Value : String); property nome:string read GetNome write SetNome; end; MeuObjeto=Class(TInterfacedObject,MinhaInterface); end; Implementos os metodos da interface. Faço um codigo assim. Var Obj : MeuObjeto; begin Obj := MeuObjeto.create; Obj.Nome := 'Teste'; ShowMessage(Obj.Nome);///Nesse ponto da access violation. end; Está dando acess violation quando vou tentar da um showmessage mostrando o conteudo de Obj.nome, quando eu vou debugando e paro com o mouse em cima de Obj.Nome ele mostra o conteudo certo, não sei o pode está acontecendo. Outro problema é quando eu tento dar um free em obj também da access violation. Qual pode da uma lúz pra solucionar esses problemas? At. Ricardo Lima [*] Amigo, não leva a mal não mas como conseguiu compilar isto ...o compilador do delphi (pelo menos aqui pra mim) dis que eu não implementei os metodos da interface... Pra funcionar voce tem que fazer assim olha. { Interfaces funcionam como um contrato apenas...um contrato que duas aplicações entende os seus 'termos' para poder utiliza-la Por isso em uma interface não se implementa nada, apenas declara os metodos...(metodos estes que serão implementados no objetos que implementar esta interface)} MinhaInterface = interface function GetNome:String; procedure SetNome(Value : String); property Nome : string read GetNome write SetNome; end; { Ok, dada a interface acima agora eu vou criar um objeto pra implementar o 'contrato', ou aliar, criar os mecanismos que vai fazer o contrato funcionar. Normalmente as interfaces podem ser utilizadas em Units separadas dos codigos fontes... Mas necessárias para compilar o objeto } MeuObjeto = class(TInterfacedObject, MinhaInterface) private Fnome : String // Aqui tem a propriedade public { Estes proximos dois procedimentos DEVEM existir em TODOS os objetos que forem implementar a MinhaInterface (lembra do contrato)} function GetNome:String; procedure SetNome(Value : String); property Nome : String read GetNome write SetNome; end; {...} implementation {...} function MeuObjeto.GetNome:String; begin Result := FNome; end; procedure MeuObjeto.SetNome(Value : String); begin FNome := Value; End; { ai voce declara uma variavel do seu objeto } var vObjeto : MinhaInterface; begin vObjeto := MeuObjeto.Create; vObjeto.Nome := 'Elazar'; {...} ShowMessage('O nome do objeto é: ' vObjeto.Nome); Certo meu camarada... Elazar ___ Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora! http://br.acesso.yahoo.com -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Problema com interfaces.
Ricardo, Pelo código que vc mostrou, o problema não deve ser a interface, pois vc nem utilizou ela no código. Veja se vc está construindo o objeto corretamente (no seu código real, pois o exemplo parece estar certo) e se não está destruindo o mesmo em algum outro lugar antes de utilizar. Se quiser, pode me enviar o código real pra eu dar uma olhada. -- Marcos Douglas Mensagem Original From: Ricardo Lima Mariz [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Seg, Agosto 28, 2006 7:56 pm Subject: [delphi-br] Problema com interfaces. Estou tentando trabalhar com interfaces, mas ta complicado. Tenho MinhaInterface=interface function GetNome:String; procedure SetNome(Value : String); property nome:string read GetNome write SetNome; end; MeuObjeto=Class(TInterfacedObject,MinhaInterface); end; Implementos os metodos da interface. Faço um codigo assim. Var Obj : MeuObjeto; begin Obj := MeuObjeto.create; Obj.Nome := 'Teste'; ShowMessage(Obj.Nome);///Nesse ponto da access violation. end; Está dando acess violation quando vou tentar da um showmessage mostrando o conteudo de Obj.nome, quando eu vou debugando e paro com o mouse em cima de Obj.Nome ele mostra o conteudo certo, não sei o pode está acontecendo. Outro problema é quando eu tento dar um free em obj também da access violation. Qual pode da uma lúz pra solucionar esses problemas? At. Ricardo Lima [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: RES: [delphi-br] Problema com interfaces.
Acho que ele só queria definir o exemplo, não deve ter escrito um código completo... -- Marcos Douglas Mensagem Original From: Elazar Dornelles Ceza [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Ter, Agosto 29, 2006 9:05 am Subject: RES: [delphi-br] Problema com interfaces. [***] Estou tentando trabalhar com interfaces, mas ta complicado. Tenho MinhaInterface=interface function GetNome:String; procedure SetNome(Value : String); property nome:string read GetNome write SetNome; end; MeuObjeto=Class(TInterfacedObject,MinhaInterface); end; Implementos os metodos da interface. Faço um codigo assim. Var Obj : MeuObjeto; begin Obj := MeuObjeto.create; Obj.Nome := 'Teste'; ShowMessage(Obj.Nome);///Nesse ponto da access violation. end; Está dando acess violation quando vou tentar da um showmessage mostrando o conteudo de Obj.nome, quando eu vou debugando e paro com o mouse em cima de Obj.Nome ele mostra o conteudo certo, não sei o pode está acontecendo. Outro problema é quando eu tento dar um free em obj também da access violation. Qual pode da uma lúz pra solucionar esses problemas? At. Ricardo Lima [*] Amigo, não leva a mal não mas como conseguiu compilar isto ...o compilador do delphi (pelo menos aqui pra mim) dis que eu não implementei os metodos da interface... Pra funcionar voce tem que fazer assim olha. { Interfaces funcionam como um contrato apenas...um contrato que duas aplicações entende os seus 'termos' para poder utiliza-la Por isso em uma interface não se implementa nada, apenas declara os metodos...(metodos estes que serão implementados no objetos que implementar esta interface)} MinhaInterface = interface function GetNome:String; procedure SetNome(Value : String); property Nome : string read GetNome write SetNome; end; { Ok, dada a interface acima agora eu vou criar um objeto pra implementar o 'contrato', ou aliar, criar os mecanismos que vai fazer o contrato funcionar. Normalmente as interfaces podem ser utilizadas em Units separadas dos codigos fontes... Mas necessárias para compilar o objeto } MeuObjeto = class(TInterfacedObject, MinhaInterface) private Fnome : String // Aqui tem a propriedade public { Estes proximos dois procedimentos DEVEM existir em TODOS os objetos que forem implementar a MinhaInterface (lembra do contrato)} function GetNome:String; procedure SetNome(Value : String); property Nome : String read GetNome write SetNome; end; {...} implementation {...} function MeuObjeto.GetNome:String; begin Result := FNome; end; procedure MeuObjeto.SetNome(Value : String); begin FNome := Value; End; { ai voce declara uma variavel do seu objeto } var vObjeto : MinhaInterface; begin vObjeto := MeuObjeto.Create; vObjeto.Nome := 'Elazar'; {...} ShowMessage('O nome do objeto é: ' vObjeto.Nome); Certo meu camarada... Elazar ___ Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora! http://br.acesso.yahoo.com -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Problema com interfaces.
Elazar obrigado pela ajuda! Esse código não é o meu eu coloquei ai apenas para exemplificar o meu problema, logo abaixo eu coloquei o texto Implementos os metodos da interface, os metodos que reclamou ai eu os implementei, mas eu ja consegui resolver, o problema era que eu tava dando um cast de um objecto para uma interface, e isso tava gerando os erros. Valeu pela força. - Original Message - From: Elazar Dornelles Ceza To: delphi-br@yahoogrupos.com.br Sent: Tuesday, August 29, 2006 9:05 AM Subject: RES: [delphi-br] Problema com interfaces. [***] Estou tentando trabalhar com interfaces, mas ta complicado. Tenho MinhaInterface=interface function GetNome:String; procedure SetNome(Value : String); property nome:string read GetNome write SetNome; end; MeuObjeto=Class(TInterfacedObject,MinhaInterface); end; Implementos os metodos da interface. Faço um codigo assim. Var Obj : MeuObjeto; begin Obj := MeuObjeto.create; Obj.Nome := 'Teste'; ShowMessage(Obj.Nome);///Nesse ponto da access violation. end; Está dando acess violation quando vou tentar da um showmessage mostrando o conteudo de Obj.nome, quando eu vou debugando e paro com o mouse em cima de Obj.Nome ele mostra o conteudo certo, não sei o pode está acontecendo. Outro problema é quando eu tento dar um free em obj também da access violation. Qual pode da uma lúz pra solucionar esses problemas? At. Ricardo Lima [*] Amigo, não leva a mal não mas como conseguiu compilar isto ...o compilador do delphi (pelo menos aqui pra mim) dis que eu não implementei os metodos da interface... Pra funcionar voce tem que fazer assim olha. { Interfaces funcionam como um contrato apenas...um contrato que duas aplicações entende os seus 'termos' para poder utiliza-la Por isso em uma interface não se implementa nada, apenas declara os metodos...(metodos estes que serão implementados no objetos que implementar esta interface)} MinhaInterface = interface function GetNome:String; procedure SetNome(Value : String); property Nome : string read GetNome write SetNome; end; { Ok, dada a interface acima agora eu vou criar um objeto pra implementar o 'contrato', ou aliar, criar os mecanismos que vai fazer o contrato funcionar. Normalmente as interfaces podem ser utilizadas em Units separadas dos codigos fontes... Mas necessárias para compilar o objeto } MeuObjeto = class(TInterfacedObject, MinhaInterface) private Fnome : String // Aqui tem a propriedade public { Estes proximos dois procedimentos DEVEM existir em TODOS os objetos que forem implementar a MinhaInterface (lembra do contrato)} function GetNome:String; procedure SetNome(Value : String); property Nome : String read GetNome write SetNome; end; {...} implementation {...} function MeuObjeto.GetNome:String; begin Result := FNome; end; procedure MeuObjeto.SetNome(Value : String); begin FNome := Value; End; { ai voce declara uma variavel do seu objeto } var vObjeto : MinhaInterface; begin vObjeto := MeuObjeto.Create; vObjeto.Nome := 'Elazar'; {...} ShowMessage('O nome do objeto é: ' vObjeto.Nome); Certo meu camarada... Elazar ___ Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora! http://br.acesso.yahoo.com [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Problema com interfaces.
Marcos obrigado pela força. Eu consegui resolver esse proboela, era que eu tava dando um cast de um objecto para uma interface, e isso tava gerando os erros. - Original Message - From: Marcos Douglas To: delphi-br@yahoogrupos.com.br Sent: Tuesday, August 29, 2006 9:28 AM Subject: Re: [delphi-br] Problema com interfaces. Ricardo, Pelo código que vc mostrou, o problema não deve ser a interface, pois vc nem utilizou ela no código. Veja se vc está construindo o objeto corretamente (no seu código real, pois o exemplo parece estar certo) e se não está destruindo o mesmo em algum outro lugar antes de utilizar. Se quiser, pode me enviar o código real pra eu dar uma olhada. -- Marcos Douglas Mensagem Original From: Ricardo Lima Mariz [EMAIL PROTECTED] To: delphi-br@yahoogrupos.com.br Sent: Seg, Agosto 28, 2006 7:56 pm Subject: [delphi-br] Problema com interfaces. Estou tentando trabalhar com interfaces, mas ta complicado. Tenho MinhaInterface=interface function GetNome:String; procedure SetNome(Value : String); property nome:string read GetNome write SetNome; end; MeuObjeto=Class(TInterfacedObject,MinhaInterface); end; Implementos os metodos da interface. Faço um codigo assim. Var Obj : MeuObjeto; begin Obj := MeuObjeto.create; Obj.Nome := 'Teste'; ShowMessage(Obj.Nome);///Nesse ponto da access violation. end; Está dando acess violation quando vou tentar da um showmessage mostrando o conteudo de Obj.nome, quando eu vou debugando e paro com o mouse em cima de Obj.Nome ele mostra o conteudo certo, não sei o pode está acontecendo. Outro problema é quando eu tento dar um free em obj também da access violation. Qual pode da uma lúz pra solucionar esses problemas? At. Ricardo Lima [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Problema com interfaces.
Resaltando, caso vc trabalhe com variáveis de tipo INTERFACE no private de um form ou datamodule, coloque no OnDestroy do seu form a atribuição NIL para a variável, caso não fizer isso, poderão ocorrer erros muito estranhos no fechamento do seu Form/DataModule. Tive uma baita dor de cabeça até descobrir isso. - Original Message - From: Ricardo Lima Mariz To: delphi-br@yahoogrupos.com.br Sent: Tuesday, August 29, 2006 9:55 AM Subject: Re: [delphi-br] Problema com interfaces. Elazar obrigado pela ajuda! Esse código não é o meu eu coloquei ai apenas para exemplificar o meu problema, logo abaixo eu coloquei o texto Implementos os metodos da interface, os metodos que reclamou ai eu os implementei, mas eu ja consegui resolver, o problema era que eu tava dando um cast de um objecto para uma interface, e isso tava gerando os erros. Valeu pela força. - Original Message - From: Elazar Dornelles Ceza To: delphi-br@yahoogrupos.com.br Sent: Tuesday, August 29, 2006 9:05 AM Subject: RES: [delphi-br] Problema com interfaces. [***] Estou tentando trabalhar com interfaces, mas ta complicado. Tenho MinhaInterface=interface function GetNome:String; procedure SetNome(Value : String); property nome:string read GetNome write SetNome; end; MeuObjeto=Class(TInterfacedObject,MinhaInterface); end; Implementos os metodos da interface. Faço um codigo assim. Var Obj : MeuObjeto; begin Obj := MeuObjeto.create; Obj.Nome := 'Teste'; ShowMessage(Obj.Nome);///Nesse ponto da access violation. end; Está dando acess violation quando vou tentar da um showmessage mostrando o conteudo de Obj.nome, quando eu vou debugando e paro com o mouse em cima de Obj.Nome ele mostra o conteudo certo, não sei o pode está acontecendo. Outro problema é quando eu tento dar um free em obj também da access violation. Qual pode da uma lúz pra solucionar esses problemas? At. Ricardo Lima [*] Amigo, não leva a mal não mas como conseguiu compilar isto ...o compilador do delphi (pelo menos aqui pra mim) dis que eu não implementei os metodos da interface... Pra funcionar voce tem que fazer assim olha. { Interfaces funcionam como um contrato apenas...um contrato que duas aplicações entende os seus 'termos' para poder utiliza-la Por isso em uma interface não se implementa nada, apenas declara os metodos...(metodos estes que serão implementados no objetos que implementar esta interface)} MinhaInterface = interface function GetNome:String; procedure SetNome(Value : String); property Nome : string read GetNome write SetNome; end; { Ok, dada a interface acima agora eu vou criar um objeto pra implementar o 'contrato', ou aliar, criar os mecanismos que vai fazer o contrato funcionar. Normalmente as interfaces podem ser utilizadas em Units separadas dos codigos fontes... Mas necessárias para compilar o objeto } MeuObjeto = class(TInterfacedObject, MinhaInterface) private Fnome : String // Aqui tem a propriedade public { Estes proximos dois procedimentos DEVEM existir em TODOS os objetos que forem implementar a MinhaInterface (lembra do contrato)} function GetNome:String; procedure SetNome(Value : String); property Nome : String read GetNome write SetNome; end; {...} implementation {...} function MeuObjeto.GetNome:String; begin Result := FNome; end; procedure MeuObjeto.SetNome(Value : String); begin FNome := Value; End; { ai voce declara uma variavel do seu objeto } var vObjeto : MinhaInterface; begin vObjeto := MeuObjeto.Create; vObjeto.Nome := 'Elazar'; {...} ShowMessage('O nome do objeto é: ' vObjeto.Nome); Certo meu camarada... Elazar ___ Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o discador agora! http://br.acesso.yahoo.com [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http
[delphi-br] Problema com interfaces.
Estou tentando trabalhar com interfaces, mas ta complicado. Tenho MinhaInterface=interface function GetNome:String; procedure SetNome(Value : String); property nome:string read GetNome write SetNome; end; MeuObjeto=Class(TInterfacedObject,MinhaInterface); end; Implementos os metodos da interface. Faço um codigo assim. Var Obj : MeuObjeto; begin Obj := MeuObjeto.create; Obj.Nome := 'Teste'; ShowMessage(Obj.Nome);///Nesse ponto da access violation. end; Está dando acess violation quando vou tentar da um showmessage mostrando o conteudo de Obj.nome, quando eu vou debugando e paro com o mouse em cima de Obj.Nome ele mostra o conteudo certo, não sei o pode está acontecendo. Outro problema é quando eu tento dar um free em obj também da access violation. Qual pode da uma lúz pra solucionar esses problemas? At. Ricardo Lima [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html