Вниз
Скачать: 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.025 c
2-1139245399
Glex
2006-02-06 20:03
2006.02.26
Как освободить(Free) экземпляр TImage при клике на него?


1-1138120988
буратино
2006-01-24 19:43
2006.02.26
TWebBrowser


2-1139210354
BlackCat
2006-02-06 10:19
2006.02.26
fkCalculated


2-1139316683
Dmitrij_K
2006-02-07 15:51
2006.02.26
Толи меня глючит, толи delphi


2-1139526658
Коля
2006-02-10 02:10
2006.02.26
Как заблокировать форму?




   Наверх