Здравствуйте, Vladimir81, Вы писали:
V>IEnumCLSID* pEnumCLSID;
V>В качестве результата, всегда получаю список СОМ-серверов зарегистрированных на локальной машине.
V>Подскажите пожалуйста, что здесь не так?
Для этих целей есть спец. сервис — OPCEnum (устанавливается при установке компонентов OPC).
Пример создания:
COSERVERINFO ServerInfo = { 0 };
ServerInfo.pwszName = szMachineName;
ServerInfo.pAuthInfo = NULL;
MULTI_QI MultiQI[2] = { 0 };
MultiQI[0].pIID = &_ATL_IIDOF(IOPCServerList);
MultiQI[0].pItf = NULL;
MultiQI[0].hr = S_OK;
MultiQI[1].pIID = &_ATL_IIDOF(IOPCServerList2);
MultiQI[1].pItf = NULL;
MultiQI[1].hr = S_OK;
HRESULT hr = ::CoCreateInstanceEx(CLSID_OpcServerList, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, &ServerInfo, 2, MultiQI);
if (SUCCEEDED(hr))
{
m_spServerList.Attach((IOPCServerList*)multi_qi[0].pItf);
m_spServerList2.Attach((IOPCServerList2*)multi_qi[1].pItf);
// IOPCServerList is required!
if (m_spServerList == NULL)
{
m_spServerList.Release();
m_spServerList2.Release();
hr = multi_qi[0].hr;
}
}
... << RSDN@Home 1.2.0 alpha rev. 679>>