![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как правильно запросить имя пользователя? [D5, Win2k, WinXP]
Eugem © (2006-11-12 01:30:00)Не получается запросить имя пользователя в программе.
Делаю так:
GetUserName(buf,lbuf);// получение имени пользователя
Имя пользователя записывается в buf. НО! Как только я пытаюсь обработать переменную buf или вывести её в текстовом виде в Edit-поле, то возникает ошибка при работе функции GetUserName.
Что не так. Подскажите, пожалуйста
Anatoly Podgoretsky (2006-11-13 07:38:00) [1]> MikePetrichenko (13.11.2006 0:43:31) [31]
А в массиве разве не надо явного задания длины, при том два раза
Ketmar (2006-11-13 02:52:00) [2]>[37] MikePetrichenko(c) 13-Nov-2006, 02:49
>И всетаки, IMHO, лучше подойти и вежливо спросить "Как Вас
>зовут?"
не забывая, что доброе слово и пистолет намного более действенны, нежели просто доброе слово.
MikePetrichenko (2006-11-13 02:49:00) [3]
> Как правильно запросить имя пользователя?
И всетаки, IMHO, лучше подойти и вежливо спросить "Как Вас зовут?"
Ketmar (2006-11-13 01:36:00) [4]>[35] MikePetrichenko(c) 13-Nov-2006, 01:02
>та ну! Как ни странно, я тоже. Видимо это старость :(
а за углом поджидает злой маразм. эх, не бывать нам как ЮЗ, ИШ, АП...
MikePetrichenko (2006-11-13 01:02:00) [5]
> а я всё по-привычке в массивы получаю. %-)
та ну! Как ни странно, я тоже. Видимо это старость :(
MikePetrichenko (2006-11-13 01:00:00) [6]
> Это лучший вариант, string используется повеместно и работать
> с ним в отличии от массива удобно, вот и получать надо сразу
> в string.
Не спорю. Возможно не лучший (зависит от контекста программы), но уж 100% ясный и простой.
Ketmar (2006-11-13 00:59:00) [7]>[32] guav(c) 13-Nov-2006, 00:57
>надо сразу в string.
а я всё по-привычке в массивы получаю. %-)
guav (2006-11-13 00:57:00) [8]> [31] MikePetrichenko © (13.11.06 00:43)
> Но потребует явного задания длинны строки SetLength
"...а мне это не интересно! Просьба подсказать другие варианты." (с) Орешник
Это лучший вариант, string используется повеместно и работать с ним в отличии от массива удобно, вот и получать надо сразу в string.
MikePetrichenko (2006-11-13 00:43:00) [9]
> Глупо вообще использовать массив, string полностью совместим
> с PChar
Тоже вариант. Но потребует явного задания длинны строки SetLength для передачи в GetUserName
guav (2006-11-12 19:17:00) [10]Всё уже сказано, можно только добавить, сколько требуется выделить:
A buffer size of (UNLEN + 1) characters will hold the maximum length user name including the terminating null character. UNLEN is defined in Lmcons.h.
Из Jwa:
UNLEN = 256; // Maximum user name length
Напонмило.
http://www.delphimaster.ru/cgi-bin/nuts.pl?showpage=2
ветка Имя компьютера
Anatoly Podgoretsky (2006-11-12 19:06:00) [11]> MikePetrichenko (12.11.2006 17:46:27) [27]
Глупо вообще использовать массив, string полностью совместим с PChar
Anatoly Podgoretsky (2006-11-12 19:05:00) [12]> MikePetrichenko (12.11.2006 17:40:24) [24]
Ничего оригинального, под PChar и выделит
MikePetrichenko (2006-11-12 17:46:00) [13]А вообще, по-моему глупо использовать функции выделения/освобождения памяти для переменных, которые используются исключительно внутри функции и имеют сравнительно не большой фиксированный размер. Проще (и надежнее) обойтись обычным статическим массивом в стеке (локальная переменная функции).
MikePetrichenko (2006-11-12 17:43:00) [14]
> Для Pchar есть StrAlloc StrDispoce
Для PChar и всего отсального (кроме типизированных указателей на записи, для которых подойдет New) есть GetMem, FreeMem, HeapAlloc, MemAlloc и т.п.
Рекомендую использовать native API функции управления памятью, так как меньше гемороя будет в будущем.
Dmitrij_K (2006-11-12 17:42:00) [15]Для Pchar есть StrAlloc StrDispoce
MikePetrichenko (2006-11-12 17:40:00) [16]
> new(buf);
new для PChar??? Оригинально. А размер кто указывать будет, сколько того new нужно выделить?
Eugem (2006-11-12 17:28:00) [17]Я вот так написал:
new(buf);
GetUserName(buf,lbuf);// получение имени пользователя
sbuf:=buf;
MikePetrichenko (2006-11-12 17:07:00) [18]
var
Buf: array [0..254] of Char;
BufSize: DWORD;
begin
BufSize := 255;
FillChar(Buf, BufSize, 0);
GetUserName(Buf, BufSize);
....
end;
Ketmar (2006-11-12 15:58:00) [19]>[20] Eugem(c) 12-Nov-2006, 15:56
>Напишите как память выделить
вот здесь помогут: http://antigreen.org/bioreactor/
зыж quousque tandem?!!
Eugem (2006-11-12 15:56:00) [20]
> нет, видимо. оно не умеет читать, только писать. чукча-программист.
Из того что написали... Кто говорит, что всё правильно. Кто говорит, что нужно выделять память. Напишите как память выделить