开发者

C# - How to test at runtime which COM coclass was used to instantiate an interface?

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).

I开发者_如何学运维n 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!


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜