![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите разобраться с функцией 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