Главная страница
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.018 c
7-55340
Monya
2002-03-11 12:25
2002.06.17
Управление приводом CD-ROma


3-54992
BigVovch
2002-05-20 13:28
2002.06.17
Сравнение быстродействия MS SQL Server 2000 и 6.5.


3-55050
Fissher
2002-05-22 15:36
2002.06.17
Ошибка в SQL запросе?


8-55226
Ruslan_
2002-02-05 13:58
2002.06.17
BMP


1-55186
Demon Ltd
2002-06-03 00:11
2002.06.17
работа с DataTimePicker