![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
wnetopenenum и wnetenumresurce [D7, WinXP]
vladik © (2005-12-10 00:48:00)всем привет
народ подскажите в чом проблема у меня не получается
вызвать порядка 100 раз подряд функции
wnetopenenum и wnetenumresurce
примерно на 80 вызове функция начинает возвращать код ошибки 6(шесть)
vladik (2005-12-10 22:40:00) [1]нашол в своем коде ошибку
былотак
if (NO_ERROR <>err ) then exit;
а надо так
if (NO_ERROR <>err ) then begin wnetcloseenum(hnetenum); exit; end;
VirEx (2005-12-10 20:27:00) [2]посмотри что выведет GetLastError, оттрассируй и вставь куда надо процедуру обработки ошибок
DrPass (2005-12-10 18:19:00) [3]Возможно, после WnetCloseEnum ресурсы не освобождаются сразу, и потому заканчиваются.
Кроме того, возможно, в начале процедуры не хватает чего-то вроде fillchar(NetContainerToOpen, sizeof(TNetResource), 0);
Еще мне вообще не нравится "ручное" заполнение NetContainerToOpen. Откуда ты знаешь его параметры? Их надо еще предварительно получить вызовом WNetEnumResource для ресурса верхнего уровня (домена, или что ты там исследуешь)
vladik (2005-12-10 14:28:00) [4]сбоит на разных ресурсах
в качестве проверки прогнал 100 раз по своим ресурсам тодже самый сбой
примерно на 80 круге
DrPass (2005-12-10 13:48:00) [5]А сбоит всегда на каком-то конкретном ресурсе, или каждый раз на разных?
vladik (2005-12-10 01:57:00) [6]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 01:27:00) [7]эээ... а зачем их вызывать порядка 100 раз подряд? Ты поставил себе цель загрузить сетевой интерфейс по максимуму?
Наверное, после каждого обращения к wnetopenenum и wnetenumresurce ты забываешь WNetCloseEnum