Главная страница
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.01 c
6-55240
Prorva
2002-04-09 01:32
2002.06.17
Даже и не знаю....


1-55190
Alexander_D6_XP
2002-06-04 18:04
2002.06.17
сделать Ctrl+Enter в TMemo?!


1-55214
Voldemar
2002-06-05 14:28
2002.06.17
В D5 компилируется, а в D6 не хочет...


1-55192
mrgrin
2002-06-05 02:38
2002.06.17
Как получить выбранный элемент ComboBox?


14-55298
Malder
2002-05-14 23:05
2002.06.17
Об UBPFD