<div dir="ltr"><div>I haven't used (COM) interfaces so far since i didn't found any use for them in my code, but i didn't knew about their reference counting properties. That could save a lot of headaches i have with my 3D world editor's lightmap generation (currently there is some wrong memory deallocation somewhere that crashes the editor in partial lightmap recalculations). I plan to redesign it at some point soon and i was thinking how to handle this. Since there is native refcounting support in FPC it makes things much easier.<br>
<br></div><div>However i did a small test and i noticed something that, to me (as someone who hasn't used COM at all) looks a bit weird:<br><br></div><div>If i do a declaration like<br><br></div><div>type<br></div><div>
  IResource = interface  end;<br></div><div>  TResource = class(TInterfacedObject, IResource) ... stuff ... end;<br><br></div><div>  TSomething = class<br></div><div>    ...<br></div><div>    Resources: array of TResource;<br>
    ...<br></div><div>  end;<br><br></div><div>then reference counting doesn't work. However if i change Resources to<br><br></div><div>    Resources: array of IResource;<br><br></div><div>then it works. It seems that the compiler checks only the "topmost" type and doesn't check if TResource implements the IResource and thus doesn't do any reference counting. Is this a bug or it is supposed to work this way?<br>
<br>If the latter, is there a way to make the compiler do reference counting on a variable that has a class type which implements an interface instead of a type that is an interface itself? Or is there any other form of reference counted classes?<br>
</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Mar 21, 2013 at 12:45 PM, Michael Schnell <span dir="ltr"><<a href="mailto:mschnell@lumino.de" target="_blank">mschnell@lumino.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On 03/21/2013 12:30 PM, Graeme Geldenhuys wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 2013-03-21 08:33, Michael Schnell wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
parameters to the IDE when designing the program ? Based on this, COM /<br>
CORBA / ORB might be described as specializations of the concept.<br>
</blockquote>
I'm not sure I understand your question.<br>
<br>
COM is Component Object Model and DCOM is Distributed Component Object<br>
Model, developed by Microsoft. This only works on the Windows platform.<br>
That is how the do ActiveX, and how Delphi does multi-tier support with<br>
MIDAS (using DCOM).<br>
</blockquote></div>
That is exactly why I think the *language-concept* (here a thingy that provides reference counting, auto-creation and auto-deletion of an instance etc of a classes instance) should be described independently of COM, DCOM, Axtive X, MIDAS and such things that are not related to the language itself, while the language concept/syntax - being useful in itself, anyway, can *additionally* be used to allow the programmer to handle  COM, DCOM, Axtive X, MIDAS and such things.<div class="im">
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
In terms of Free Pascal and Interfaces support. COM style interfaces<br>
simply means they are _compatible_ with Microsoft COM, and are reference<br>
counted. CORBA style interfaces are _compatible_ with how interfaces are<br>
implemented in the CORBA standard, and there they are not reference<br>
counted.<br>
</blockquote></div>
Yep. But IMHO calling them something like "reference counting interfaces" and  "not reference counting interfaces" instead of "COM style interfaces" and "CORBA style interfaces" would be a lot more appropriate, as they are defined and usable for completely other stuff as well. In fact the term "interface" is rather misleading (as they are defined and usable for completely other stuff as well), but this of course is a Delphi heritage.<div class="im">
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
For more information on COM, DCOM, CORBA and XPCOM technologies, search<br>
WikiPedia.<br>
<br>
</blockquote></div>
Not necessary because (I already know) and *here* I am interested in the language concepts and not in the environment of the IDE or the program to be created.<span class="HOEnZb"><font color="#888888"><br>
<br>
-Michael</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
--<br>
______________________________<u></u>_________________<br>
Lazarus mailing list<br>
<a href="mailto:Lazarus@lists.lazarus.freepascal.org" target="_blank">Lazarus@lists.lazarus.<u></u>freepascal.org</a><br>
<a href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus" target="_blank">http://lists.lazarus.<u></u>freepascal.org/mailman/<u></u>listinfo/lazarus</a><br>
</div></div></blockquote></div><br></div>