Hello,

No, those methods are only for inter thread mashaling - you cannot 
marshal it like that from the client process (presumably on one machine) 
to the server (presumably on another machine or at least another 
process.)  You must marshall and unmarshal the interface entirely on the 
server, in the server process, between the threads wanting to share the 
client reference, using the shared (between the threads) FStream pointer 
variable.  So, to reiterate: In the receiving server object that 
receives the client COM interface reference from the client (which is 
running in it's own thread in the server), you must rig it so that this 
thread marshalls the received interface reference, using those calls 
shown previously, to any other thread context (apartment) that wants to 
use it (e.g. the main application thread, or any other client thread.)  
If you don't you will get the error you're getting.  Read up on COM 
threading.  A quick google turned up these 2 links that at first glance 
seems helpful:

http://www.devarticles.com/c/a/Cplusplus/COM-Threading-Models-Explained/1/
http://www.thedelphimagazine.com/samples/comthread/article.htm

HTH

Walter



reynaldi81 wrote:
>
> i have tried to use CoMarshalInterThreadInterfaceInStream to marshal
> the interface in client and CoGetInterfaceAndReleaseStream to
> unmarshal the interface in server application, but still dont solve
> the problem. it even give a new error "invalid variant type" each time
> i try to access the interface after i use the
> CoGetInterfaceAndReleaseStream.
> it seems that i have problem passing the IStream pointer from the
> client to the server , so CoGetInterfaceAndReleaseStream wont
> unmarshal the right interface.
>
> i also have tried to use the IGlobalInterfaceTable, but still dont work.
>
> thanks for any suggestion
>
> rey
>
>  
> ___ 


[Non-text portions of this message have been removed]

Reply via email to