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

Вниз

Как установить длину буфера? (WNetGetUniversalName)   Найти похожие ветки 

 
Tom ©   (2002-04-05 13:26) [0]

Добрый день.

Провожу смелые эксперименты с WNetGetUniversalName...

procedure TForm1.Button1Click(Sender: TObject);
var
Name: string;
UserName: TUniversalNameInfo;
Length: DWORD;
Result: integer;
begin
Name := "h:\\soft\disk4.zip" + #0;
Length := ???; // ??????????????????????????????
Result := WNetGetUniversalName(@Name[1], UNIVERSAL_NAME_INFO_LEVEL, @UserName, Length);
end;

Все почти получается, только после отработки WNetGetUniversalName
случается Access Violation. По-моему надобно память для буфера
выделить. Но сколько? И как (GetMem или что)?


 
Tom ©   (2002-04-05 13:55) [1]

помогите...... торможу, однако.........


 
Erik Ivanov   (2002-04-05 15:46) [2]

А что требуется в первом параметре? Я потозреваю что указатель на Name. Тогда напиши так PChar(Name)^ это корректнее, хотя можно и Name[1] без сабаки!


 
Tom ©   (2002-04-05 16:03) [3]

2 Erik Ivanov
Увы, с первым параметром - порядок (по-моему).
Процедура отрабатывает - если я после строки, где она
вызывается пишу:

memo1.lines.add(StrPAs(username.lpUniversalName)); - то в

мемо1 добавляется строка типа "\\servername\ и т.д.".

Я думаю все дело именно в буфере или его длине. Если указать
заведомо недостаточную длину - никаких Violation не возникает.
А если длину увеличить - см. выше - в буфер пишется результат (правильный), потом сразу же Violation



 
Tom ©   (2002-04-05 16:22) [4]

Конкретизирую еще конкретней :(((

procedure TForm1.Button1Click(Sender: TObject);
var
Name: string;
Buf: TUniversalNameInfo;
BufSize: DWORD;
Result: integer;
begin
Name := "h:\_common_\1c\soft\disk4.zip" + #0;

BufSize := SizeOf(Buf);
Result :=
WNetGetUniversalName( @Name[1],
UNIVERSAL_NAME_INFO_LEVEL,
@Buf,
BufSize );

memo1.lines.add(IntTostr(result));
memo1.lines.add(IntTostr(BufSize));

memo1.lines.add(StrPAs(Buf.lpUniversalName));
end;

Работает без Violation"а, но WNetGetUniversalName возвращает код
ошибки - 234 (БУФЕР МАЛОВАТ), а в BufSize кладет требуемую длину
буфера. Я длину увеличиваю до необходимого размера, а тут как
тут и Violation...

Помогите...........


 
Tom ©   (2002-04-05 17:31) [5]

Прошу помочь советом. Где же я не прав?



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

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

Наверх




Память: 0.47 MB
Время: 0.017 c
1-55092
Andrew22
2002-05-29 15:23
2002.06.17
Реестр


14-55273
lipskiy
2002-05-12 17:20
2002.06.17
1. Лист заявок для UBPFD? ______ 2. Отправка кода без оформления?


3-54966
alexa
2002-05-15 10:56
2002.06.17
сложный запрос


4-55371
ProNix
2002-04-17 16:04
2002.06.17
Файлвая система


1-55187
PTE
2002-06-05 08:53
2002.06.17
Timer и ProgressBar