Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.26;
Скачать: 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 вся ветка

Текущий архив: 2006.02.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
3-1135776468
VICTOR_MV
2005-12-28 16:27
2006.02.26
BDE. Два разных ПО не могут одновременно работать.


1-1138254587
СержК
2006-01-26 08:49
2006.02.26
Как ограничить по времени "замирание" программы


15-1139272822
Ы
2006-02-07 03:40
2006.02.26
Просто смешно и уже надоело


15-1138874093
syte_ser78
2006-02-02 12:54
2006.02.26
web дизайн


2-1139154054
asd
2006-02-05 18:40
2006.02.26
Как показать окно предварительного просм. в компоненте frxReport1