C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
OPC
Andrey
Отправлено: 14.12.2005, 12:54


Не зарегистрирован







Господа программисты. Нужна ВАША помощь. Работал ли кто с ОПС серверами. Любыми?? ЕСли да, то такой вопрос. Нужно получить с удаленной машины список серверов ОПС, установленных на ней. Есть такой код.

HRESULT hr=S_OK;
ZeroMemory(&tCoServerInfo,sizeof(tCoServerInfo));
int nSize=Edit1->Text.Length()*sizeof(WCHAR);
tCoServerInfo.pwszName=new WCHAR[nSize];
mbstowcs(tCoServerInfo.pwszName,Edit1->Text.c_str(),nSize);

hr = CoInitialize(NULL);
//CLSID clsid; // Get the CLSID from the Name
//hr = CLSIDFromProgID((L"CT.CTOPC3.1.DA.1"),&clsid);
hr=CoGetClassObject(CLSID_StdComponentCategoriesMgr,
CLSCTX_REMOTE_SERVER,&tCoServerInfo,IID_IClassFactory,reinterpret_cast<LPVOID*>(&pClassFactory));

ICatInformation* pcr = NULL ;
IUnknown *pOPCUnknown=NULL;
hr=pClassFactory->CreateInstance(pOPCUnknown,IID_ICatInformation,
(void**)&pcr);
IEnumCLSID* pEnumCLSID=0;
CLSID catid=CATID_OPCDAServer10;
pcr->EnumClassesOfCategories(1, &catid, 1, &catid, &pEnumCLSID);

enum { MAX = 20 };
CLSID rgclsid[MAX];
wchar_t *temp;
LPOLESTR p_strProgID;
ListBox1->Items->Clear();
do {
ULONG cActual = 0;
hr = pEnumCLSID->Next(MAX, rgclsid, &cActual);
if (SUCCEEDED(hr)) {
for (ULONG i = 0; i < cActual; i++)
{
StringFromCLSID(rgclsid[i],&temp);// DisplayClass(rgclsid[i]);
ProgIDFromCLSID(rgclsid[i],&p_strProgID);
ListBox1->Items->Add(WideCharToString(temp)+AnsiString(" ")+WideCharToString(p_strProgID));}
}
} while (hr == S_OK);

Но вопреки ожиданиям, постоянно получаю список ЛОКАЛЬНО зарегистрированных серверов. Хотя при работе с прямым указанаием clsid
> hr=CoGetClassObject(clsid,

производится подключение к удаленной машине и создание обьекта на ней. Почему происходит это?? Где грабли??Я только начал разбирать COM для работы с ОПС. Прошу подсказать.
LORN
Отправлено: 14.12.2005, 16:19


Не зарегистрирован







посмотри сайт http://www.opcfoundation.org/
он англоязычный
хороший ресурс если будешь много работать по этой теме
(можно взять их исходники и библиотеки после регестрации)
Andrey
Отправлено: 15.12.2005, 09:13


Не зарегистрирован







Там я уже был. Исходники только для мемберов после оплаты 500 дохлых енотов. А после регистрации они дают только библиотеки скачать свои БЕЗ описания.!!!!!!!!!!
Andrey
Отправлено: 15.12.2005, 10:25


Не зарегистрирован







Спасибо. Сам разобрался уже.

Вернуться в Технологии COM/DCOM, ActiveX