Есть задача — вызвать метод Интерфейса. Проблема в том что нет 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 интерфейса по имени.
Извините за неточности.