My underlying stub objects do indeed support the IUnknown (they would have to
seeing as they are descended from TInterfacedObject.
The list must store them as Variants - the reason is that I have to write an
object that supports the J-Integra port of List object. This port brings the
methods that take or return something over as variants, eg add(p1 : Variant).
The reason I had all my objects support IDispatch was an attempt at a shortcut
for another problem which now appears to be unneccessary so I can remove that.
However, the basic problem is still that passing an IUnknown to a method
expecting a variant seems to fail. The call goes through allright, but casting
the variant back to an IUnknown returns an unnassigned interface.
Does casting an interface to a variant increment the reference count? that could
be the problem?
Phil.
Myles Penlington <[EMAIL PROTECTED]> on 07/08/2000 12:25:35
Please respond to [EMAIL PROTECTED]
To: Multiple recipients of list delphi <[EMAIL PROTECTED]>
cc: (bcc: Phillip Middlemiss/NZ Forest Research Institute/NZ)
Subject: RE: [DUG]: Aaarrgh! Variants@#%^$3!!
Don't quite see why you are using variants in this case, but it should not
make any difference.
MyList.add(aNewObject as IUnknown)
This is the line you need to check. Does AnewObject support the IUnknown
interface?
It would appear from your comments that it does not.
I would probably use Interface variables rather than Variants by preference.
The only reason to use OLEVariants would be if you are going to pass the
object reference to VBScript/JScript eg ASP/OleAutomation.
eg MyList.Add( AInterface: IUnknown);
"My stubs are descended from TInterfacedObject but implement stub methods
for
IDispatch. "
Why do this?? Seems a complete waste of time. Does not achieve anything.
Your comment previous to this does however make complete sense, but it does
not require this to be done.
Myles.
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [SMTP:[EMAIL PROTECTED]]
> Sent: Monday, August 07, 2000 11:58 AM
> To: Multiple recipients of list delphi
> Subject: [DUG]: Aaarrgh! Variants@#%^$3!!
>
>
>
> Hi all,
>
> I am writing a client GUI that is talking to a number of Java servers via
> J-Integra (therefore COM) although that is really only background and not
> vital
> to the problem.
>
> I have written stubs for all the classes that I need from the servers so I
> can
> build the GUI without the servers needing to be up to date or even
> running.My
> stubs are descended from TInterfacedObject but implement stub methods for
> IDispatch.
>
> The problem boils down to storing the stub objects in a list that deals
> with
> OLEVariants. The List uses a TCollectionItem internally, storing each
> added
> variant inside a TCollectionItem descendant that holds onto an OLEVariant.
> Adding a new item to the list looks like this:
>
> MyList.add(aNewObject as IUnknown)
>
> which automatically casts the IUnknown to an OLEVariant which the Add
> method is
> expecting. The Add method assigns the OLEVariant to a newly created
> CollectionItem descendant.
>
> However! Inside the add method, before I do anything, in the
> Evaluate/Modify
> dialog, I cast the passed OLEVariant back to an IUnknown and it informs me
> that
> it is nil!!!!
>
> Is this because the IDispatch interface is stubbed so therefore not a real
> ActiveX object? or am I just missing something with variants? This is my
> first
> time using them.
>
> Any help would be great,
>
> cheers,
>
> Phil Middlemiss.
>
>
> --------------------------------------------------------------------------
> -
> New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
> Website: http://www.delphi.org.nz
---------------------------------------------------------------------------
New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
Website: http://www.delphi.org.nz
---------------------------------------------------------------------------
New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
Website: http://www.delphi.org.nz