RES: [delphi-br] Problema com interfaces.

2006-08-29 Por tôpico Elazar Dornelles Ceza
[***]
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.

2006-08-29 Por tôpico Marcos Douglas
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.

2006-08-29 Por tôpico Marcos Douglas
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.

2006-08-29 Por tôpico Ricardo Lima Mariz
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.

2006-08-29 Por tôpico Ricardo Lima Mariz
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.

2006-08-29 Por tôpico JJW Informática Ltda . - Roberto
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.

2006-08-28 Por tôpico Ricardo Lima Mariz
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