Как я могу использовать указатель ITypeInfo, чтобы получить имя типа? - PullRequest
8 голосов
/ 19 сентября 2010

Должен быть простой вопрос, но поиск документации сводит меня с ума. Предположим, у меня есть указатель ITypeInfo для класса или интерфейса. Как я могу получить имя этого класса или интерфейса?

Ответы [ 2 ]

7 голосов
/ 19 сентября 2010

Хорошо.Это оказалось довольно просто.Вам просто нужно вызвать метод ITypeInfo.GetDocumentation с идентификатором члена, установленным в MEMBERID_NIL (−1).Вот так:

CComBSTR typeName;
hr = typeInfo->GetDocumentation( MEMBERID_NIL, &typeName, NULL, NULL, NULL );

Если вы программируете в .NET, вышеприведенное удобно для вас выполнить методом Marshal.GetTypeInfoName:

// using System.Runtime.InteropServices;
string typeName = Marshal.GetTypeInfoName(typeInfo);
4 голосов
/ 19 сентября 2010

Краткий ответ: вы не можете использовать ITypeInfo. Вы можете получить идентификатор программы для класса, используя Win32 ProgIDFromCLSID API. В COM имя базового класса C ++, Visual Basic или .NET, реализующего COM-интерфейс или совместный класс, практически не имеет смысла. Только идентификаторы интерфейса, идентификаторы классов и программные идентификаторы имеют какое-либо значение помимо исходного кода реализации вашего совместного класса: только они могут использоваться для активации объектов COM с использованием CoCreateInstance и др. И приведения во время выполнения с использованием QueryInterface.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...