C# - How to test at runtime which COM coclass was

2019-04-12 21:04发布

问题:

Suppose you have a COM interface ICOMInterface that is implemented by coclasses Coclass1 and Coclass2. Neither of these coclasses have interfaces of their own (for simplicity's sake and to illustrate my issue).

In C#, you can create an instance of a COM interface from a coclass like so:

ICOMInterface myComInterface = new Coclass1();

Now, how can you determine whether myComInterface was instantiated by Coclass1 or Coclass2?

Using the "is" statement like follows always returns true, and as such is useless for this purpose.

Debug.WriteLine(myComInterface is Coclass1) // writes "True"
Debug.WriteLine(myComInterface is Coclass2) // writes "True"

This would work if I was testing interfaces, not coclasses, but these coclasses do not have interfaces other than the one they both implement, ICOMInterface.

I am hoping that there is a simple answer to this rather generic scenario that I am overlooking, otherwise I can post more specific details if required.

Thanks for your help!

回答1:

If the COM object implements the IPersist interface, you can get its CLSID through the IPersist::GetClassID() method. This may be all you need to know what class you're working with. You can also get the human-readable ProgID through the WinAPI ProgIDFromCLSID() method.

See here: C# Get progID from COM object



标签: c# com interface