C# Получить ProGID из COM-объекта

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

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

1 ответ

Решение

Вы можете запросить IPersistи GetClassID на это.

Это дает вам CLSID, Затем вызовите ProgIDFromCLSID:

Декларация Pinvoke здесь.

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

РЕДАКТИРОВАТЬ:

Чтобы запросить интерфейс, вы просто делаете приведение в 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#.)

Другие вопросы по тегам