[***] 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