Главная страница
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.03 c
2-1139299456
Creative
2006-02-07 11:04
2006.02.26
Full Screen Mode


2-1139443081
VitalikS
2006-02-09 02:58
2006.02.26
CD-ROM


3-1135829789
Маленький мук
2005-12-29 07:16
2006.02.26
запуск exe-файла средствами MSSQL 2000


3-1135838346
mss
2005-12-29 09:39
2006.02.26
Ошибка в Interbase


3-1136234002
Piter
2006-01-02 23:33
2006.02.26
Интерфейс взаимодейстия с базой