![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WNetGetUniversalName [D6, Win2k]
mich © (2004-04-15 16:04:00)Доброго времени суток, знатоки!
Пытаюсь сделать так:
var LocalName: PChar;
iType: DWORD;
Buffer: REMOTE_NAME_INFO;
BufSize: DWORD;
...
LocalName:= Edit1.Text; //'O:'
iType:= REMOTE_NAME_INFO_LEVEL;
BufSize:= MAX_PATH*MAX_PATH*MAX_PATH;
WNetGetUniversalName(LocalName, iType, @Buffer, BufSize);
...
Работает. В полях переменной Buffer возвращаются искомые значения, НО: сразу после этого программа вылетает с ошибкой 'Access violation...'. Не могу понять из-за чего. Прошу помощи. Спасибо.
VMcL (2004-04-15 16:51:00) [1]2 mich
procedure TForm1.Button1Click(Sender: TObject);
var
LocalName: PChar;
iType: DWORD;
Buffer: array [0 .. 3 * MAX_PATH + 2] of Char;
BufSize: DWORD;
Res: DWORD;
begin
Memo1.Clear;
LocalName := PChar(Edit1.Text); //'O:'
iType := REMOTE_NAME_INFO_LEVEL;
BufSize := SizeOf(Buffer);
Res := WNetGetUniversalName(LocalName, iType, @Buffer[0], BufSize);
if Res <> NO_ERROR then RaiseLastOSError;
Memo1.Lines.Add(PRemoteNameInfo(@Buffer)^.lpUniversalName);
Memo1.Lines.Add(PRemoteNameInfo(@Buffer)^.lpConnectionName);
Memo1.Lines.Add(PRemoteNameInfo(@Buffer)^.lpRemainingPath);
end;
Игорь Шевченко (2004-04-15 16:41:00) [2]
> А относительно MAX_PATH^3 - три поля REMOTE_NAME_INFO, в
> которых возвращаются пути
Может быть, MAX_PATH * 3 ? :)))
VMcL (2004-04-15 16:34:00) [3]Вот пример, но на С:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wnet/wnet/determining_the_location_of_a_share.asp
mich (2004-04-15 16:30:00) [4]2 VMcL:
LocalName:= PChar(Edit1.Text) - очепятался.
А относительно MAX_PATH^3 - три поля REMOTE_NAME_INFO, в которых возвращаются пути.
Значение, которое она возвращает - 0 (NO_ERROR). А как сделать анализ?
VMcL (2004-04-15 16:23:00) [5]+ Нужен анализ результата вызова функции.
VMcL (2004-04-15 16:15:00) [6]>>mich (15.04.04 16:04)
>LocalName:= Edit1.Text;
Тут вообще ошибка вомпилятора.
>BufSize:= MAX_PATH*MAX_PATH*MAX_PATH;
Долго думал? А справку читал?
var
LocalName: PChar;
iType: DWORD;
Buffer: REMOTE_NAME_INFO;
BufSize: DWORD;
...
LocalName:= PChar(Edit1.Text); //'O:'
iType:= REMOTE_NAME_INFO_LEVEL;
BufSize:= SizeOf(Buffer);
WNetGetUniversalName(LocalName, iType, @Buffer, BufSize);