Главная страница
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.047 c
2-1139411905
GoshaT
2006-02-08 18:18
2006.02.26
Изменить массив


2-1139130196
JEK2
2006-02-05 12:03
2006.02.26
конвертировать таблицу *.DBF в *.DB


3-1135933859
ANB
2005-12-30 12:10
2006.02.26
Оптимальный способо генерации ID (Оракл)


2-1139538368
Mozart
2006-02-10 05:26
2006.02.26
TMemo


2-1139306079
Offceman
2006-02-07 12:54
2006.02.26
Вопрос о таймерах !