C # Получить ProgID из COM-объекта - PullRequest
9 голосов
/ 10 августа 2009

Я хотел бы знать, есть ли способ получить progId объекта com в c #. Например, у меня есть объект webBrowser, который предоставляет объект документа, который является COM. Есть ли способ выяснить, что такое progID этого объекта документа?

Я знаю, что вы можете получить объект из progID, но не знаю, как это сделать.

1 Ответ

9 голосов
/ 10 августа 2009

Вы можете запросить IPersist и GetClassID для него.

Это дает вам CLSID. Затем позвоните ProgIDFromCLSID :

Пинвоук декларация здесь.

Это дает вам ProgID.

EDIT:

Чтобы запросить интерфейс, вы просто делаете приведение в C #:

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

За кулисами, это то, что на самом деле происходит, как показано здесь в C ++:

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

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

(Но никто не утруждает себя написанием этого материала вручную, поскольку умный указатель может в значительной степени имитировать опыт C #.)

...