Как получить refid интерфейса по его имени?
От: dx_grey  
Дата: 19.02.03 09:43
Оценка:
Есть задача — вызвать метод Интерфейса. Проблема в том что нет CLSID обьекта и refid интерфейса, есть только ProgId обьекта, символьное имя интерфейса и символьное имя метода этого интерфейса.

К примеру:

ProgId: REMOTEPWCTRL.RemotePwCtrl.1
Интерфейс : IRemotePwControl
Функция: Connect

Интерфейс IRemotePwControl наследуется от IDispatch, есть TLB библиотека

Как получить указатель на интерфейс IRemotePwControl не имея его refid и вызвать функцию Connect?


HRESULT hr;
ITypeLib *pTypeLib;
ITypeInfo *pTypeInfo;
LONG lTypeInfoCount;
OLSESTR strClassName = L"REMOTEPWCTRL.RemotePwCtrl.1";
hr = CLSIDFromProgID(strClassName, &CLSID);

// tlbclsid я беру из реестра, вырезал для краткости
hr = LoadRegTypeLib(tlbclsid, 1, 0, 0, &pTypeLib);

//Далее я могу перечислить все интерфейсы данного обьекта
lTypeInfoCount = pTypeLib->GetTypeInfoCount();
for(int lIter=0; lIter<lTypeInfoCount;lIter++)
{
  pTypeLib->GetDocumentation(lIter, &bstrName, &bstrDocString, NULL, &bstrHelp);
  if(bstrName) ::SysFreeString(bstrName);
}

//Дальше я застрял на получении refid интерфейса по имени.



Извините за неточности.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.