Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Помогите разобраться с функцией 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 ... "

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


 
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


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

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


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

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


 
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: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";


 
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 10:33) [5]

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


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

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


 
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}


 
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]

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


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

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


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

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


 
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 за помощью? (все равно мы тут одни)


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

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



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

Форум: "Сети";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.031 c
1-1082701946
Stas
2004-04-23 10:32
2004.05.09
Access и MDICHILD


3-1081989338
Смертник
2004-04-15 04:35
2004.05.09
Проблема с БД.


3-1081500086
Соловьев
2004-04-09 12:41
2004.05.09
EhLib - dgTitlte = false - Access violation


14-1082361946
zzet
2004-04-19 12:05
2004.05.09
Испания выводит войска из Ирака.


14-1081750703
31512
2004-04-12 10:18
2004.05.09
WinXP и Win98 - нет дружбы по сети?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский