<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comentários para: Ponteiros no Pascal / Delphi &#8211; Fundamentos</title>
	<atom:link href="http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/</link>
	<description>Desenvolvendo o desenvolvimento</description>
	<lastBuildDate>Thu, 03 Nov 2011 11:52:48 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
	<item>
		<title>Por: Alecão</title>
		<link>http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1098</link>
		<dc:creator>Alecão</dc:creator>
		<pubDate>Thu, 08 Jul 2010 13:33:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1098</guid>
		<description>Luciano, vou tentar explicar de forma simplificada.

Tanto na aplicação quanto na DLL vc precisa declarar um tipo procedure, ex:

type
  TMinhaProcedure = procedure(Parametro: string);

Na aplicação crie sua procedure normalmente (tem que ter a mesma assinatura do tipo acima, ex:

procedure ProcedureAplicacao(Parametro: string);
begin
  ShowMessage(Parametro);
end;

criar um &quot;set&quot; na DLL (uma procedure que irá passar o ponteiro da procedure da aplicação)

var
  DLLMinhaProcedure: TMinhaProcedure;

procedure SetMinhaProcedure(AMinhaProcedure: TMinhaProcedure);
begin
  DLLMinhaProcedure := AMinhaProcedure;
end;

Na aplicação, em algum momento vc tem que chamar este Set da DLL passando a procedure da aplicação como parâmetro:

SetMinhaProcedure(ProcedureAplicacao);

Agora na DLL, quando quiser chamar a &quot;ProcedureAplicacao&quot;, basta chamar:

if Assigned(DLLMinhaProcedure) then
  DLLMinhaProcedure(&#039;Olá Mundo!&#039;);

Perceba que eu não utilizei ponteiros neste exemplo... É o poder do Pascal.</description>
		<content:encoded><![CDATA[<p>Luciano, vou tentar explicar de forma simplificada.</p>
<p>Tanto na aplicação quanto na DLL vc precisa declarar um tipo procedure, ex:</p>
<p>type<br />
  TMinhaProcedure = procedure(Parametro: string);</p>
<p>Na aplicação crie sua procedure normalmente (tem que ter a mesma assinatura do tipo acima, ex:</p>
<p>procedure ProcedureAplicacao(Parametro: string);<br />
begin<br />
  ShowMessage(Parametro);<br />
end;</p>
<p>criar um &#8220;set&#8221; na DLL (uma procedure que irá passar o ponteiro da procedure da aplicação)</p>
<p>var<br />
  DLLMinhaProcedure: TMinhaProcedure;</p>
<p>procedure SetMinhaProcedure(AMinhaProcedure: TMinhaProcedure);<br />
begin<br />
  DLLMinhaProcedure := AMinhaProcedure;<br />
end;</p>
<p>Na aplicação, em algum momento vc tem que chamar este Set da DLL passando a procedure da aplicação como parâmetro:</p>
<p>SetMinhaProcedure(ProcedureAplicacao);</p>
<p>Agora na DLL, quando quiser chamar a &#8220;ProcedureAplicacao&#8221;, basta chamar:</p>
<p>if Assigned(DLLMinhaProcedure) then<br />
  DLLMinhaProcedure(&#8216;Olá Mundo!&#8217;);</p>
<p>Perceba que eu não utilizei ponteiros neste exemplo&#8230; É o poder do Pascal.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Luciano Umbelino</title>
		<link>http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1097</link>
		<dc:creator>Luciano Umbelino</dc:creator>
		<pubDate>Wed, 07 Jul 2010 19:27:55 +0000</pubDate>
		<guid isPermaLink="false">http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1097</guid>
		<description>Alecão estou precisando passar o endereço de uma procedure na minha aplicação em Delphi para um dll. Num determinado momento esta dll chamará esta rotina para validar um códigos. Amigo não estou sabendo como proceder, vc pode me auxiliar?
Grato.</description>
		<content:encoded><![CDATA[<p>Alecão estou precisando passar o endereço de uma procedure na minha aplicação em Delphi para um dll. Num determinado momento esta dll chamará esta rotina para validar um códigos. Amigo não estou sabendo como proceder, vc pode me auxiliar?<br />
Grato.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Tiago</title>
		<link>http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1083</link>
		<dc:creator>Tiago</dc:creator>
		<pubDate>Wed, 10 Jun 2009 14:08:43 +0000</pubDate>
		<guid isPermaLink="false">http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1083</guid>
		<description>Opa, obrigado Alecão!

Adotei!
Abraços!</description>
		<content:encoded><![CDATA[<p>Opa, obrigado Alecão!</p>
<p>Adotei!<br />
Abraços!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Alecão</title>
		<link>http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1082</link>
		<dc:creator>Alecão</dc:creator>
		<pubDate>Wed, 10 Jun 2009 13:35:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1082</guid>
		<description>@Tiago, estou vendo que seu problema é outro. Se liberarmos o Form com Form1.Free por exemplo, apenas liberamos o objeto mas a referência para Form1 continua apontando para um endereçamento que não existe mais, ou seja, ele é diferente de &quot;nil&quot;.

Este problema irá ocorrer com uso de ponteiro também.

Por isso, quando liberar o form, temos também que atribuir nil a referência, assim:

Form1.Free;
Form1 := nil;

ou simplesmente usar uma função disponível na unit SysUtils:

FreeAndNil(Form1);</description>
		<content:encoded><![CDATA[<p>@Tiago, estou vendo que seu problema é outro. Se liberarmos o Form com Form1.Free por exemplo, apenas liberamos o objeto mas a referência para Form1 continua apontando para um endereçamento que não existe mais, ou seja, ele é diferente de &#8220;nil&#8221;.</p>
<p>Este problema irá ocorrer com uso de ponteiro também.</p>
<p>Por isso, quando liberar o form, temos também que atribuir nil a referência, assim:</p>
<p>Form1.Free;<br />
Form1 := nil;</p>
<p>ou simplesmente usar uma função disponível na unit SysUtils:</p>
<p>FreeAndNil(Form1);</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Tiago</title>
		<link>http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1081</link>
		<dc:creator>Tiago</dc:creator>
		<pubDate>Wed, 10 Jun 2009 13:24:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1081</guid>
		<description>Caro Alecão,

Utilizando da segunda forma como você me disse, a variável Form do pCriaForm não seria a mesma variável que a Form1.
Nesse caso ela sempre comparará como Nil e criará um novo Form.
Faça o teste sem mandar destruir o Form ao fechar que você verá.

Para isso que estive procurando um bom exemplo de ponteiro como o seu.

Muito Obrigado!</description>
		<content:encoded><![CDATA[<p>Caro Alecão,</p>
<p>Utilizando da segunda forma como você me disse, a variável Form do pCriaForm não seria a mesma variável que a Form1.<br />
Nesse caso ela sempre comparará como Nil e criará um novo Form.<br />
Faça o teste sem mandar destruir o Form ao fechar que você verá.</p>
<p>Para isso que estive procurando um bom exemplo de ponteiro como o seu.</p>
<p>Muito Obrigado!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Alecão</title>
		<link>http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1080</link>
		<dc:creator>Alecão</dc:creator>
		<pubDate>Wed, 10 Jun 2009 12:59:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1080</guid>
		<description>@Tiago, a construção esta certa, apenas precisa de alguns ajustes:

type
  PForm: ^TForm;

Procedure pCriaForm( Form : PForm ; FormClass : TFormClass ) ;
Begin
 
  If ( Form^ = Nil ) Then
    Form^ := FormClass.Create( Application ) ;
  Form^.Show;

End;

e chama assim: pCriaForm( @Form1 , TForm1 );

Mas o mais simples nesse caso é não usar ponteiro:

Procedure pCriaForm(var Form : TForm ; FormClass : TFormClass ) ;
Begin
 
  If ( Form = Nil ) Then
    Form := FormClass.Create( Application ) ;
  Form.Show;

End;

e chama assim: pCriaForm( Form1 , TForm1 );

o &quot;var&quot; indica que aquele parâmetro é por referência e não por valor, assim a alteração da variável dentro da procedure reflete na variável passada. Como disse nos artigos, apesar do Pascal ter manipulação de ponteiros, as vezes estes não são necessários.</description>
		<content:encoded><![CDATA[<p>@Tiago, a construção esta certa, apenas precisa de alguns ajustes:</p>
<p>type<br />
  PForm: ^TForm;</p>
<p>Procedure pCriaForm( Form : PForm ; FormClass : TFormClass ) ;<br />
Begin</p>
<p>  If ( Form^ = Nil ) Then<br />
    Form^ := FormClass.Create( Application ) ;<br />
  Form^.Show;</p>
<p>End;</p>
<p>e chama assim: pCriaForm( @Form1 , TForm1 );</p>
<p>Mas o mais simples nesse caso é não usar ponteiro:</p>
<p>Procedure pCriaForm(var Form : TForm ; FormClass : TFormClass ) ;<br />
Begin</p>
<p>  If ( Form = Nil ) Then<br />
    Form := FormClass.Create( Application ) ;<br />
  Form.Show;</p>
<p>End;</p>
<p>e chama assim: pCriaForm( Form1 , TForm1 );</p>
<p>o &#8220;var&#8221; indica que aquele parâmetro é por referência e não por valor, assim a alteração da variável dentro da procedure reflete na variável passada. Como disse nos artigos, apesar do Pascal ter manipulação de ponteiros, as vezes estes não são necessários.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Tiago</title>
		<link>http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1079</link>
		<dc:creator>Tiago</dc:creator>
		<pubDate>Wed, 10 Jun 2009 12:43:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1079</guid>
		<description>Eu não consigo definir um ponteiro em uma procedure, ou como eu poderia fazer?

Exemplo do quero fazer:

Procedure pCriaForm( Form : ^TForm ; FormClass : TFormClass ) ;
Begin

   If ( Form^ = Nil ) Then
      Form^ := FormClass.Create( Application ) ;
   Form^.Show;

End;

Para chamar assim: pCriaForm( Form1 ; TForm1 );

Obrigado</description>
		<content:encoded><![CDATA[<p>Eu não consigo definir um ponteiro em uma procedure, ou como eu poderia fazer?</p>
<p>Exemplo do quero fazer:</p>
<p>Procedure pCriaForm( Form : ^TForm ; FormClass : TFormClass ) ;<br />
Begin</p>
<p>   If ( Form^ = Nil ) Then<br />
      Form^ := FormClass.Create( Application ) ;<br />
   Form^.Show;</p>
<p>End;</p>
<p>Para chamar assim: pCriaForm( Form1 ; TForm1 );</p>
<p>Obrigado</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Francisca</title>
		<link>http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1059</link>
		<dc:creator>Francisca</dc:creator>
		<pubDate>Tue, 07 Oct 2008 13:13:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-1059</guid>
		<description>Esse artigo me salvou... parabéns muito bom.</description>
		<content:encoded><![CDATA[<p>Esse artigo me salvou&#8230; parabéns muito bom.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Ponteiros no Pascal / Delphi - Entenda os endere&#231;os de mem&#243;ria de DevelopeZ</title>
		<link>http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-58</link>
		<dc:creator>Ponteiros no Pascal / Delphi - Entenda os endere&#231;os de mem&#243;ria de DevelopeZ</dc:creator>
		<pubDate>Mon, 05 May 2008 16:35:30 +0000</pubDate>
		<guid isPermaLink="false">http://www.brasiltech.net/developez/2008/05/04/ponteiros-no-pascal-delphi-fundamentos/#comment-58</guid>
		<description>[...] Pol&#237;tica de Privacidade             &#171; Ponteiros no Pascal / Delphi - Fundamentos [...]</description>
		<content:encoded><![CDATA[<p>[...] Pol&iacute;tica de Privacidade             &laquo; Ponteiros no Pascal / Delphi &#8211; Fundamentos [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>

