2009-08-10 3 views
8

Ich würde gerne wissen, ob es eine Möglichkeit gibt, die progId eines com-Objekts in C# zu bekommen. zB - Ich habe ein WebBrowser-Objekt, das ein Dokumentobjekt freigibt, das COM ist. Gibt es eine Möglichkeit, herauszufinden, was die progID dieses Dokumentobjekts ist?C# Get progID von COM-Objekt

Ich weiß, dass Sie das Objekt von progID bekommen können, nur nicht sicher, wie es umgekehrt geht.

Antwort

8

Sie könnten für IPersist und GetClassID darauf abfragen.

Das bringt Ihnen die CLSID. Dann ProgIDFromCLSID nennen:

The pinvoke declaration is here.

, dass Sie die Programm-ID wird.

EDIT:

für eine Schnittstelle zum Abfragen, die Sie gerade eine Besetzung in C# tun:

IPersist p = myObj as IPersist; 
if (p != null) 
{ 
    // phew, it worked... 
} 

Hinter den Kulissen, das ist, was tatsächlich geschieht, wie in C hier gezeigt ++:

IUnknown *pUnk = // ... get object from somewhere 

IPersist *pPersist = 0; 
if (SUCCEEDED(pUnk->QueryInterface(IID_IPersist, (void **)&pPersist))) 
{ 
    // phew, it worked... 
} 

(Aber niemand stört mit in diesen Tagen das Zeug mit der Hand zu schreiben, als ein Smart-Pointer kann so ziemlich die C# Erfahrung simulieren.)