Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите разобраться с функцией NetServerGetInfo!! [D5]


boa ©   (2004-03-19 07:58:00) 

Пытаюсь освоить эту функцию, но чего-то делаю не так, а что не пойму.
Вот код:

function NetServerGetInfo(servername: PChar; level: DWORD; bufptr: Pointer): DWORD;  external 'netapi32.dll';

procedure TForm1.Button1Click(Sender: TObject);
type
 TServerInfo100 = packed record
   sv100_platform_id: DWORD;
   sv100_name: array[0..255] of Char;
 end;

 aServerInfo100 = array[0..255] of TServerInfo100;

var
 PServerInfo100: ^aServerInfo100;

begin
 GetMem(PServerInfo100, SizeOf(PServerInfo100));
 try
   NetServerGetInfo(nil, 100, PServerInfo100);
 finally
   FreeMem(PServerInfo100);
 end;
end;  << ---  " Access violation... "

Только большая просьба - не пинайте меня ногами, если глупый код !!!


boa   (2004-03-19 14:15:00) [1]

Lm.pas нашел, а с Lmconsts - голяк. Но для работы пока всего хватает, только еше не заработало. У меня просто голова начинает закипать от такого количества информации!
BiN! Если возникнут большие трудности, можно к Вам обратиться через EMail за помощью? (все равно мы тут одни)


BiN   (2004-03-19 13:01:00) [2]

на jedi, кажется есть трансляция хидерных файлов LanManager-a (Lmconsts.pas, Lm.pas и т.д.)
Но я пользуюсь своим переводом.


boa   (2004-03-19 12:46:00) [3]

А где все это можно найти?


BiN   (2004-03-19 12:33:00) [4]

const
 NERR_Success = 0;// Success

 { More data is available. }
 ERROR_MORE_DATA = 234;   { dderror }
 {$EXTERNALSYM ERROR_MORE_DATA}


boa   (2004-03-19 12:25:00) [5]

А чему равны NERR_Success и ERROR_MORE_DATA? А то я уже вспотел их искать!


boa   (2004-03-19 10:33:00) [6]

Спасибо за подарок !!!
Буду разбираться.


BiN   (2004-03-19 09:38:00) [7]

да, кстати, объявление NetServerEnum забыл тебе написать

function NetServerEnum(servername: LMCSTR;  level: DWORD; bufptr: PPointer;
                      prefmaxlen: DWORD; entriesread: PDWORD; totalentries: PDWORD;
                      servertype: DWORD;  domain: LMCSTR; resume_handle: PDWORD): NET_API_STATUS;
   stdcall; external 'netapi32.dll' name 'NetServerEnum';


BiN   (2004-03-19 09:22:00) [8]

Читай Msdn внимательнее: тебе самому не нужно выделять память под массив, а освобождается она с помощью NetApiBufferFree.
Вот тебе подарок :)

type
 TServer_Info_101 = _SERVER_INFO_101;
 TEnumServersProc = function(const ServerInfo:TServer_Info_101; Param:DWORD):BOOL;

function NetEnumServers(const Domain:string; Proc:TEnumServersProc; ServerType:DWORD; Param:DWORD):DWORD;
var
 tmpDomain:WideString;
 lpBufPtr:Pointer;
 dwRes:DWORD;
 Readed, Total:DWORD;
 i:Integer;
begin
 Result:=0;
 if (@Proc=nil) then exit;
 tmpDomain:=Domain;
 repeat
   dwRes:=NetServerEnum(nil, 101, @lpBufPtr, DWORD(-1), @Readed, @Total, ServerType, PWideChar(tmpDomain), nil);
   if (dwRes=NERR_Success) or (dwRes=ERROR_MORE_DATA) then
   if (Readed>0) then
   begin
     Result:=Readed;
     for i:=0 to Readed-1 do
     if not Proc(TServer_Info_101Array(lpBufPtr^)[i], Param)
     then break;
   end else Result:=0;
   NetApiBufferFree(lpBufPtr);
 until (dwRes <> ERROR_MORE_DATA);
end;


boa   (2004-03-19 08:30:00) [9]

исправил на
GetMem(PServerInfo100, SizeOf(TServerInfo100)*256);
но легче не стало!


Cobalt   (2004-03-19 08:18:00) [10]

PServerInfo100 - это указатель. Так?
Каков размер указателя? - 4 байта.
Очень не похоже на размер сотни структур типа aServerInfo100


Наверх

Титульная страница Поиск, карта сайта Написать письмо