Using TInterfaceList and casting interfaces

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Using TInterfaceList and casting interfaces

Benito van der Zander
Hi,

how should one use TInterfaceList with other interfaces than IUnknown?
Let's say we have a ISomeInterface derived from IUnknown.

When we have an ISomeInterface, we can add it to the list fine, because
an ISomeInterface is an IUnknown.

But when we get it back from the list, it is an IUnknown and not an
ISomeInterface.

Writing (list.get(0) as ISomeInterface), is very slow and not possible,
when the interface has no GUID.

Writing ISomeInterface(list.get(0)) usually works fine, but when -CR is
set, it does not compile.

Writing ISomeInterface(pointer(list.get(0))) appears to work, but is
that safe, or does it confuse the reference counting?


Or perhaps it is better to use gvector rather than TInterfaceList?


Best,

Benito

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Using TInterfaceList and casting interfaces

Free Pascal - General mailing list
Benito van der Zander <[hidden email]> schrieb am So., 7. Apr. 2019, 15:34:
Writing (list.get(0) as ISomeInterface), is very slow and not possible,
when the interface has no GUID.

This is indeed what is supposed to be used with TInterfaceList. 

Or perhaps it is better to use gvector rather than TInterfaceList?

If you only store a specific interface type then using one of the generic containers specialized to that type would indeed be best. 

Regards, 
Sven 

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Using TInterfaceList and casting interfaces

Benito van der Zander
Hi,
Or perhaps it is better to use gvector rather than TInterfaceList?

If you only store a specific interface type then using one of the generic containers specialized to that type would indeed be best. 


 and on a closer look TInterfaceList does a lot of locking.

guess TInterfaceList should be avoided, unless you actually need something thread-safe. The classes unit is full of weird stuff

Best,
Benito 

Am 07.04.19 um 20:24 schrieb Sven Barth via fpc-pascal:
Benito van der Zander <[hidden email]> schrieb am So., 7. Apr. 2019, 15:34:
Writing (list.get(0) as ISomeInterface), is very slow and not possible,
when the interface has no GUID.

This is indeed what is supposed to be used with TInterfaceList. 

Or perhaps it is better to use gvector rather than TInterfaceList?

If you only store a specific interface type then using one of the generic containers specialized to that type would indeed be best. 

Regards, 
Sven 

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal