Форум: "WinAPI";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c