Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2009, 12:51   #1
yngwie
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 16
По умолчанию Проконсультируйте по GetUserName()

Всем привет есть маленький вопрос. Вот пример:

Код:
//Узнать имя текущего рользователя

    char buff[100];
    DWORD dw=100;
    GetUserName(buff, &dw);
в последней строке этого кода, второй параметр мы указываем как адрес переменной dw. Мне не очень понятно почему именно адрес,
мы что не можем размер переменной buf указать просто как константное число 100 ?
yngwie вне форума Ответить с цитированием
Старый 18.01.2009, 13:07   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Стандартная ситуация при использовании WinAPI. При первом вызове в dw пишешь 0 и на выходе в ЭТОЙ ЖЕ переменной получаешь необходимый размер буфера. Только потом выделяешь необходимую память и вызываешь функцию второй раз. Ну или можно указать максимальный размер буфера. В данном случае, если мне не изменяет память, он равен 15 (могу ошибаться).
Баламут вне форума Ответить с цитированием
Старый 18.01.2009, 14:40   #3
yngwie
Пользователь
 
Регистрация: 18.01.2009
Сообщений: 16
По умолчанию

не очень понял напиши пожалуйста примерчик
yngwie вне форума Ответить с цитированием
Старый 19.01.2009, 02:57   #4
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Только извини, я на Делфи. Не хочу ставить си. И поскольку пользую Д2009, потому и pWideChar.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  p: pointer;
  dw: CARDINAL;
begin
  p := nil;
  dw := 0;
  if not GetUserName(p, dw) then begin
    GetMem(p, dw);
    if GetUserName(p, dw) then Label1.Caption := PWideChar(p);
  end;
FreeMem(p);
end;
Баламут вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проконсультируйте насчет рекурсии. leshax Общие вопросы C/C++ 3 19.01.2009 10:44
Срочно! Вопрос по БД. Проконсультируйте пожалуйста... MercuryStar Помощь студентам 1 22.07.2008 08:59
Проконсультируйте новичка пожалста Luka83 Microsoft Office Word 1 19.02.2008 07:39