Reflection on COM objects (Lucian Wischik)
Reflection on .Net objects is done through System.Type and is very easy. For instance, “Dim type = GetType(System.String)” and now you can look at all the members and inheritance hierarchy of the System.String class.
Reflection on COM types is also easy if they have an interop assembly. For instance, add a project reference to the COM Microsoft Speech Library and again do “GetType(SpeechLib.SpVoice)”. This lets you reflect on the .Net “Runtime Callable Wrapper” that’s in the interop assembly, that was generated from the COM type’s type library, and that contains all information that the type library had.
But sometimes you’ll be given COM objects that don’t have .Net interop assemblies in your code. I ran into this when I wrote a managed plugin for Visual Studio. For reflection here you have to use ITypeInfo instead of System.Type. Here’s code to get that ITypeInfo, then dig through it and print out all the members. I’m a novice at COM programming, so I’d welcome suggestions and improvements.
[ the rest of this post is on my new vblog, http://blogs.msdn.com/lucian ]