Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Помогите разобраться с функцией NetServerGetInfo!!   Найти похожие ветки 

 
boa   (2004-03-19 07:58) [0]

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

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 ... "

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


 
Cobalt ©   (2004-03-19 08:18) [1]

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


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

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


 
BiN ©   (2004-03-19 09:22) [3]

Читай 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;


 
BiN ©   (2004-03-19 09:38) [4]

да, кстати, объявление 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";


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

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


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

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


 
BiN ©   (2004-03-19 12:33) [7]

const
 NERR_Success = 0;// Success

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


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

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


 
BiN ©   (2004-03-19 13:01) [9]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
1-1079985762
MonkRo
2004-03-22 23:02
2004.04.11
Надстрочные и подстрочные знаки в RichEdit


8-1071338095
SliderCrash
2003-12-13 20:54
2004.04.11
Проблема с алгоритмом.


14-1082339863
Думкин
2004-04-19 05:57
2004.04.11
С днем рождения! 19 апреля.


1-1082706888
Шлей Артем
2004-04-23 11:54
2004.04.11
Установка программы


9-1071030267
Kair
2003-12-10 07:24
2004.04.11
Скорость вращения