Re[9]: ADSI
От: __zve Россия  
Дата: 13.04.05 17:59
Оценка: 3 (1)
Здравствуйте, moon, Вы писали:

M>Здравствуйте, __zve, Вы писали:


__>>По поводу FTP


__>>1. В цикле пытаетесь открыть через ADsOpenObject

__>>IIS://localhost/MSFTPSVC/1
__>>IIS://localhost/MSFTPSVC/2
__>>IIS://localhost/MSFTPSVC/3
__>>.....


__>>Пока оно не выдаст ошибку

__>> После этого открываете
__>>IIS://localhost/MSFTPSVC

__>>и создаете в нем обьект с именем с соответствующей цифрой

__>>и типом IIsFtpServer

__>>в нем создаете обьект с именем ROOT и типом IIsFtpVirtualDir

__>>После этого у вас готов FTP сайт

__>>далее создаете там обьекты типа IIsFtpVirtualDir

__>>это и будут ваши виртуальные директории.


M>Опять появлись некоторые вопросы)

M>При выполнениии следующего кода у меня почему-то не создается FTP сайт...



M>
M>  HRESULT hr = S_OK;
M>  IADsContainer *pCont, *pContRoot;
M>  IDispatch *pDisp=NULL, *pDispVD = NULL;
M>  int i;
M>  IADs *pObj;

M>  CoInitialize(NULL);
  
M>  hr = ADsOpenObject(L"IIS://localhost/MSFTPSVC",NULL,NULL,0,IID_IADs,(void**)&pObj);
M>     if ( !SUCCEEDED(hr) ){ return 0;}
  
  pObj->>QueryInterface(IID_IADsContainer, (void**)&pCont); 
M>     if ( !SUCCEEDED(hr) ){ return 0;}

M>  hr = pCont->Create(L"IIsFTPServer", L"3", &pDisp);
M>    if ( !SUCCEEDED(hr) ){ return 0;}

  pObj->>SetInfo(); 

M>  hr = pDisp->QueryInterface(IID_IADsContainer, (void**)&pContRoot);
M>  if ( !SUCCEEDED(hr) ){ return 0;}

M>  pContRoot->Create(L"IIsFtpVirtualDir", L"ROOT", &pDispVD);

  pObj->>SetInfo(); 
  
  pObj->>Release();
M>  pContRoot->Release();
M>  pDispVD->Release();
M>  pCont->Release();
M>  pDisp->Release();

M>  CoUninitialize();
M>


M>У Вас есть какие-нибудь предположения?

M>Заранее спасибо!

Проблема в том что Вы должны вызывать SetInfo у обьекта который создаете а не его контейнера.
Ниже я привел изменение которое приводит к созданию FTP сайта.

M> HRESULT hr = S_OK;

M> IADsContainer *pCont, *pContRoot;
M> IDispatch *pDisp=NULL, *pDispVD = NULL;
M> int i;
<b>IADs *pObj,*pO1;</b>

M> CoInitialize(NULL);


M> hr = ADsOpenObject(L"IIS://localhost/MSFTPSVC",NULL,NULL,0,IID_IADs,(void**)&pObj);

M> if ( !SUCCEEDED(hr) ){ return 0;}

pObj->>QueryInterface(IID_IADsContainer, (void**)&pCont);

M> if ( !SUCCEEDED(hr) ){ return 0;}

M> hr = pCont->Create(L"IIsFTPServer", L"3", &pDisp);

M> if ( !SUCCEEDED(hr) ){ return 0;}

pObj->>SetInfo();


<b>
pDisp->QueryInterface(IID_IADs, (void**)&pO1);
if(!SUCCEEDED(hr) ){ return 0;}

hr = pO1->SetInfo();
if (!SUCCEEDED(hr)){ return 0;}
</b>

M> hr = pDisp->QueryInterface(IID_IADsContainer, (void**)&pContRoot);

M> if ( !SUCCEEDED(hr) ){ return 0;}

M> pContRoot->Create(L"IIsFtpVirtualDir", L"ROOT", &pDispVD);


pObj->>SetInfo();


pObj->>Release();

M> pContRoot->Release();
M> pDispVD->Release();
M> pCont->Release();
M> pDisp->Release();

M> CoUninitialize();

M>[/ccode]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.