Здравствуйте!
Есть код:
CoInitialize(NULL);
ICatInformation* pcr = NULL ;
COSERVERINFO csi={0};
MULTI_QI qi[1]={0};
// Set the name of the remote server.
csi.pwszName = (L"Proliant1");
// Here are the interfaces I want.
qi[0].pIID = &IID_ICatInformation;
hr = CoCreateInstanceEx(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_REMOTE_SERVER, &csi, 1, qi);
pcr=(ICatInformation*) qi[0].pItf;
IEnumCLSID* pEnumCLSID;
// "OPC Data Access Servers Version 1.0"
CLSID catid = CATID_OPCDAServer10;
pcr->EnumClassesOfCategories(1, &catid, 1, &catid, &pEnumCLSID);
и т.д
В качестве результата, всегда получаю список СОМ-серверов зарегистрированных на локальной машине.
Подскажите пожалуйста, что здесь не так?
Здравствуйте, 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>>
Здравствуйте, Splin, Вы писали:
S>Для этих целей есть спец. сервис — OPCEnum (устанавливается при установке компонентов OPC).
Спасибо большое, заработало