<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">Il 25/10/2017 13:41, Mattias Gaertner
via Lazarus ha scritto:<br>
</div>
<blockquote type="cite"
cite="mid:20171025134143.74793ee6@limapholos.matflo.wg">
<pre wrap="">No. The Delphi syntax is "ProcIdentifier:=Proc" or
"ProcIdentifier:=@Proc".
The "@Some:=" means assign something to address of Some. Which is bogus.
I guess Delphi's auto dereference actually translates this to
@Some^:=. Still bogus, but valid bogus.
</pre>
</blockquote>
<p>From embarcadero doc wiki
(<a class="moz-txt-link-freetext" href="http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Procedural_Types_(Delphi))">http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Procedural_Types_(Delphi))</a>:</p>
<p>
<blockquote type="cite">
<h2><span class="mw-headline"
id="Procedural_Types_in_Statements_and_Expressions">Procedural
Types in Statements and Expressions</span></h2>
<p>When a procedural variable is on the left side of an
assignment statement, the compiler expects a procedural value
on the right. The assignment makes the variable on the left a
pointer to the function or procedure indicated on the right.
In other contexts, however, using a procedural variable
results in a call to the referenced procedure or function. You
can even use a procedural variable to pass parameters:
</p>
</blockquote>
[snip]<br>
</p>
<p>
<blockquote type="cite">
<p>The <b>@</b> operator can also be used to assign an untyped
pointer value to a procedural variable. For example:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr">
<div class="delphi source-delphi">
<pre class="de1"> <span class="kw1">var</span> StrComp<span class="sy1">:</span> <span class="kw1">function</span><span class="br0">(</span>Str1<span class="sy1">,</span> Str2<span class="sy1">:</span> <span class="kw4">PChar</span><span class="br0">)</span><span class="sy1">:</span> <span class="kw4">Integer</span><span class="sy1">;</span>
<span class="sy1">...</span>
<span class="sy2">@</span>StrComp <span class="sy1">:</span><span class="sy3">=</span> GetProcAddress<span class="br0">(</span>KernelHandle<span class="sy1">,</span> <span class="st0">'lstrcmpi'</span><span class="br0">)</span><span class="sy1">;</span></pre>
</div>
</div>
</blockquote>
<br>
</p>
<p>ThisĀ is no more true (as least as of X10 where I tested and it
gave rise to a compiler error), but it has been for a long time.
That's why I assumed that assigning an untyped pointer to a
procedural variable was both legal and also properly supported.</p>
<p>Giuliano</p>
<p><br>
</p>
</body>
</html>