Форум: "Сети";
Текущий архив: 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.034 c