----- Original Message ----- From: "Jim Sievert" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Friday, September 12, 2003 6:17 PM Subject: Re: [ADVANCED-DOTNET] Object identities, marshaling issues and interoperability
> Besides your solution, perhaps the GIT may help. I'm not 100% sure about > this, though. Assuming you're wrapping your COM object, the creation of > such a wrapper could register the object in the GIT. The question is > whether or not you can register the same object multiple times (from two > different apartments no less). If you can, the same cookie should be > returned. I believe you can use this cookie as your Hashtable key? Surely. Thanks for fresh idea about GIT, Jim, I'll try it. > > > -----Original Message----- > > From: Dmitry Shaporenkov [mailto:[EMAIL PROTECTED] > > Sent: Friday, September 12, 2003 7:55 AM > > To: [EMAIL PROTECTED] > > Subject: Re: [ADVANCED-DOTNET] Object identities, marshaling > > issues and interoperability > > > > > > ----- Original Message ----- > > From: "Jim Sievert" <[EMAIL PROTECTED]> > > To: <[EMAIL PROTECTED]> > > Sent: Friday, September 12, 2003 4:20 PM > > Subject: Re: [ADVANCED-DOTNET] Object identities, marshaling > > issues and interoperability > > > > > > > Your best bet is to compare objects based on their > > IUnknowns. You can > > > use > > > GetIUnknownForObject() for this (don't forget to call > > Release when you're > > > done). > > > > This is exactly what I'm trying to do. > > > > > Because these IUnknown values are Apartment relative, you > > just can't > > > plop the IUnknown as a key in the Hashtable. You're going > > to have to > > > do some work -- probably by specializing the Hashtable... > > > > Yes, but I can't figure out how this work could be done. > > May be I need to marshal IUnknown to a stream and > > then use contents of the stream as an identity? If the > > contents of the stream is apartment-independent, this will probably > > work, but such a solution is obviously inefficient. Or do > > I need something else? > > > > COM experts, please advise! > > > > > -----Original Message----- > > > From: Dmitry Shaporenkov [mailto:[EMAIL PROTECTED] > > > Sent: Friday, September 12, 2003 4:25 AM > > > To: [EMAIL PROTECTED] > > > Subject: [ADVANCED-DOTNET] Object identities, marshaling issues and > > > interoperability > > > > > > > > > Hi all, > > > > > > I need help in a problem concerning COM/.NET interoperability in a > > > multithreaded application. The application (written in > > > C#) uses an external component which exposes COM-based > > object model. > > > Let's say 'Item' is an object of the model, item has a __CComObject > > > type. Items are accessed via calls to the component like > > the follows: > > > > > > .... > > > Item anItem = externalObject.GetItem ("MyItem"); > > > .... > > > > > > During startup a worker thread is running to collect some > > information > > > about items and store it in a hashtable (using items as the keys): > > > > > > .... > > > Hashtable theCache = new Hashtable (); > > > theCache [anItem] = <something>; > > > ... > > > > > > The information is then used from code executing in the UI thread: > > > > > > ... > > > Item anItem = externalObject.GetItem ("MyItem"); > > > <something> = theCache [anItem]; // Oops. This does not work ... > > > > > > The problem is that, because UI thread lives in a STA and > > the worker > > > thread executes in another apartment, the UI thread gets different > > > wrapper than the worker thread, since items are marshalled across > > > apartments. I realize that this is normal behavior. > > However, I need a > > > way to identify items in a thread-independent fashion. Items > > > themselves do not have any properties which might serve as > > a reliable > > > unique identifiers. > > > > > > So, the question is, how such problems are resolved? May be > > there is > > > still a way to get apartment-independent identifier of the > > object? I > > > am not a COM guru, but I took a look at > > > System.Runtime.InteropServices.Marshal class and found nothing > > > similar. > > > > > > Any advices / references will be greatly appreciated. Thanks in > > > advance. > > > > > > Regards, > > > Dmitry Shaporenkov > > > mailto:[EMAIL PROTECTED] > > > > > > =================================== > > > This list is hosted by DevelopMentor- http://www.develop.com NEW! > > > ASP.NET courses you may be interested in: > > > > > > 2 Days of ASP.NET, 29 Sept 2003, in Redmond > > > http://www.develop.com/courses/2daspdotnet > > > > > > Guerrilla > > > ASP.NET, 13 Oct 2003, in Boston > > > http://www.develop.com/courses/gaspdotnet > > > > > > View archives and > > > manage your subscription(s) at http://discuss.develop.com > > > > > > > =================================== > > This list is hosted by DevelopMentor- http://www.develop.com > > NEW! ASP.NET courses you may be interested in: > > > > 2 Days of ASP.NET, 29 Sept 2003, in Redmond > > http://www.develop.com/courses/2daspdotnet > > > > Guerrilla > > ASP.NET, 13 Oct 2003, in Boston > > http://www.develop.com/courses/gaspdotnet > > > > View archives and > > manage your subscription(s) at http://discuss.develop.com > > > > =================================== > > This list is hosted by DevelopMentor- http://www.develop.com > > NEW! ASP.NET courses you may be interested in: > > > > 2 Days of ASP.NET, 29 Sept 2003, in Redmond > > http://www.develop.com/courses/2daspdotnet > > > > Guerrilla > > ASP.NET, 13 Oct 2003, in Boston > > http://www.develop.com/courses/gaspdotnet > > > > View archives and > > manage your subscription(s) at http://discuss.develop.com > > > > =================================== > This list is hosted by DevelopMentor╝ http://www.develop.com > NEW! ASP.NET courses you may be interested in: > > 2 Days of ASP.NET, 29 Sept 2003, in Redmond > http://www.develop.com/courses/2daspdotnet > > Guerrilla ASP.NET, 13 Oct 2003, in Boston > http://www.develop.com/courses/gaspdotnet > > View archives and manage your subscription(s) at http://discuss.develop.com =================================== This list is hosted by DevelopMentor╝ http://www.develop.com NEW! ASP.NET courses you may be interested in: 2 Days of ASP.NET, 29 Sept 2003, in Redmond http://www.develop.com/courses/2daspdotnet Guerrilla ASP.NET, 13 Oct 2003, in Boston http://www.develop.com/courses/gaspdotnet View archives and manage your subscription(s) at http://discuss.develop.com