Здравствуйте, DNSokol, Вы писали:
DNS>Здравствуйте, DNSokol, Вы писали:
DNS>там куча интерфейсов акаца
так что ещё проще можно CreateOleObject('ActiveDS.IADsUser'); CreateOleObject('ActiveDS.IADsContainer'); и работать как с OLE объектами, используя как доку — описание этих интерфейсов в *tlb.h
Спасибо за отклик. Я к сожалению не имею опыта работы с OLE об'ектами в C++ Builder'e. Если можно пример, а то у меня компилятор ругается, что мол у класса Variant нет такого метода Members и пр.
Нашел пример на
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adsi/adsi/iadscontainer_get__newenum.asp
Попытался его адаптировать, не удается внедрить в проект файлик, импортированный из библиотеки activeds_tlb. Если его не импортировать в проект, а просто добавить через инклюд, то компилятор ругается [Linker Error] Unresolved external 'ADsGetObject' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ. А если импортировать, то при компиляции activeds_tlb.cpp ругается на ошибку описанную в моем 1-м посте.
Вот мой адаптированный пример:
IEnumVARIANT *pEnum = NULL;
IADsContainer *pCont = NULL;
LPUNKNOWN pUnk = NULL;
VARIANT var;
IDispatch *pDisp = NULL;
unsigned long lFetch;
IADs *pADs = NULL;
// In this sample, skip error checking.
ADsGetObject(L"
LDAP://OU=Users,DC=mydomain,DC=ru", IID_IADsContainer, (void**) &pCont);
pCont->get__NewEnum(&pUnk);
pCont->Release();
pUnk->QueryInterface(IID_IEnumVARIANT, (void**) &pEnum);
pUnk->Release();
Memo1->Lines->Clear();
// Enumerate.
HRESULT hr = pEnum->Next(1, &var, &lFetch);
while(SUCCEEDED(hr) && lFetch > 0)
{
if (lFetch == 1)
{
BSTR bstr;
pDisp = V_DISPATCH(&var);
pDisp->QueryInterface(IID_IADs, (void**)&pADs);
pDisp->Release();
hr = pADs->get_Name(&bstr);
if(SUCCEEDED(hr))
{
Memo1->Lines->Add(bstr);
SysFreeString(bstr);
}
pADs->Release();
}
VariantClear(&var);
hr = pEnum->Next(1, &var, &lFetch);
};
pEnum->Release();
Помогите советом, как правильно скомпилировать этот пример.