Вниз
Скачать: CL | DM;

wnetopenenum и wnetenumresurce   Найти похожие ветки 

 
vladik   (2005-12-10 00:48) [0]

всем привет
народ подскажите в чом проблема у меня не получается
вызвать порядка 100 раз подряд функции
wnetopenenum  и  wnetenumresurce
примерно на 80 вызове функция начинает возвращать код ошибки 6(шесть)


 
DrPass ©   (2005-12-10 01:27) [1]

эээ... а зачем их вызывать порядка 100 раз подряд? Ты поставил себе цель загрузить сетевой интерфейс по максимуму?
Наверное, после каждого обращения к wnetopenenum и wnetenumresurce ты забываешь WNetCloseEnum


 
vladik   (2005-12-10 01:57) [2]

WNetCloseEnum  не забыл
а 100 раз так веть на разные адреса

ниже приведена процедура которую я вызываю 100 раз

procedure Tform1.Sharedresurs(Sharedaddres:string);
var
err:integer;
hNetEnum: THandle;
NetContainerToOpen: NETRESOURCE;
ResourceBuffer: array[1..2000] of TNetResource;
i,ResourceBuf,EntriesToGet: DWORD;
begin
NetContainerToOpen.dwScope:=RESOURCE_GLOBALNET;
NetContainerToOpen.dwType:=RESOURCETYPE_ANY;
NetContainerToOpen.lpLocalName:=nil;
NetContainerToOpen.lpRemoteName:= PChar("\\"+Sharedaddres);
NetContainerToOpen.lpProvider:= nil;
WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_CONNECTABLE or RESOURCEUSAGE_CONTAINER,
                 @NetContainerToOpen, hNetEnum);
while TRUE do
begin
 ResourceBuf := sizeof(ResourceBuffer);
 EntriesToGet := 2000;
 err:=WNetEnumResource(hNetEnum,EntriesToGet,@ResourceBuffer,ResourceBuf);
 listbox1.Items.Add(inttostr(err));// коды ошибки

 if (NO_ERROR <>err ) then exit;

 for i := 1 to EntriesToGet do
   begin
    Memo1.Lines.Add(string(ResourceBuffer[i].lpRemoteName));
   end;
end;
wnetcloseenum(hnetenum);
end;


 
DrPass ©   (2005-12-10 13:48) [3]

А сбоит всегда на каком-то конкретном ресурсе, или каждый раз на разных?


 
vladik   (2005-12-10 14:28) [4]

сбоит на разных ресурсах
в качестве проверки прогнал 100 раз по своим ресурсам тодже самый сбой
примерно на 80 круге


 
DrPass ©   (2005-12-10 18:19) [5]

Возможно, после WnetCloseEnum ресурсы не освобождаются сразу, и потому заканчиваются.
Кроме того, возможно, в начале процедуры не хватает чего-то вроде fillchar(NetContainerToOpen, sizeof(TNetResource), 0);
Еще мне вообще не нравится "ручное" заполнение NetContainerToOpen. Откуда ты знаешь его параметры? Их надо еще предварительно получить вызовом WNetEnumResource для ресурса верхнего уровня (домена, или что ты там исследуешь)


 
VirEx ©   (2005-12-10 20:27) [6]

посмотри что выведет GetLastError, оттрассируй и вставь куда надо процедуру обработки ошибок


 
vladik   (2005-12-10 22:40) [7]

нашол в своем коде ошибку
былотак
if (NO_ERROR <>err ) then exit;
а надо так
if (NO_ERROR <>err ) then begin wnetcloseenum(hnetenum); exit; end;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
15-1138733471
GEN++
2006-01-31 21:51
2006.02.26
Автозагрузка


1-1138140989
Volf_555
2006-01-25 01:16
2006.02.26
Как в TIniFile удалить целый раздел, а не отдельный параметр?


1-1138212845
Yegorchic
2006-01-25 21:14
2006.02.26
Помогите


4-1133903555
Конопелька
2005-12-07 00:12
2006.02.26
Вторая копия программы !


15-1138860793
ANB
2006-02-02 09:13
2006.02.26
Поздравляю себя с рождением вчера (01.02.2006) дочки




   Наверх