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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2015, 08:09   #1
Адилич
 
Регистрация: 19.02.2015
Сообщений: 6
По умолчанию Как получить имя компьютера?

Доброго дня.

Есть код
Код:
	LPCWSTR GetPCName(){
		TCHAR buffer[MAX_COMPUTERNAME_LENGTH+1];
		DWORD size;
		size = sizeof(buffer);
		GetComputerNameW(buffer, &size);		
		
		return buffer; 
	}
Но, когда я вывожу его в MessageBoxW(NULL, GetPCName(), L"test", MB_OK);
то в качестве результата вижу китайский иероглиф. Также пытался вывести результат в консоль cout << buffer << endl; там вообще получаю адрес в памяти.
Господа подскажите что делаю не так?

Последний раз редактировалось Stilet; 09.03.2015 в 09:19.
Адилич вне форума Ответить с цитированием
Старый 09.03.2015, 09:21   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
GetComputerNameW(&buffer, &size);
И это неудачный ход. Тебе buffer нужно создавать динамически. Статический массив не подойдет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.03.2015, 09:24   #3
Адилич
 
Регистрация: 19.02.2015
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
GetComputerNameW(&buffer, &size);
И это неудачный ход. Тебе buffer нужно создавать динамически. Статический массив не подойдет.
Пробывал и так, вот ругается.
error C2664: GetComputerNameW: невозможно преобразовать параметр 1 из "TCHAR (*)[16]" в "LPWSTR"
Адилич вне форума Ответить с цитированием
Старый 09.03.2015, 09:31   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

как вариант – напрямую с реестра. стопудово жеж и функция берёт его оттуда. так почему же не избавиться от посредника?
Изображения
Тип файла: jpg 17.jpg (55.5 Кб, 142 просмотров)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.03.2015, 09:57   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Пробывал и так, вот ругается.
Поэтому я и говорю - делай указатель на widechar, размещай его в памяти, передавай его этой функции и возвращай результат:
Код:
	LPCWSTR GetPCName(){
		TCHAR *buffer=Выделяем память
		DWORD size=Размер выделенного;
		GetComputerNameW(buffer, &size);		
		return buffer; 
	}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.03.2015, 10:59   #6
Адилич
 
Регистрация: 19.02.2015
Сообщений: 6
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
как вариант – напрямую с реестра. стопудово жеж и функция берёт его оттуда. так почему же не избавиться от посредника?
Здесь дело принципа вытащить данные с помощью WinAPI. Нужно просто разобраться почему данные в такой форме возвращаются.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Поэтому я и говорю - делай указатель на widechar, размещай его в памяти, передавай его этой функции и возвращай результат:
Код:
	LPCWSTR GetPCName(){
		TCHAR *buffer=Выделяем память
		DWORD size=Размер выделенного;
		GetComputerNameW(buffer, &size);		
		return buffer; 
	}
А можете работоспособный пример написать?, а то я не как не могу догнать.

Последний раз редактировалось Stilet; 09.03.2015 в 11:53.
Адилич вне форума Ответить с цитированием
Старый 09.03.2015, 11:24   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

А мсдн с его примерами уже не в моде, да?
p51x вне форума Ответить с цитированием
Старый 09.03.2015, 11:31   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
А можете работоспособный пример написать?
не валялся б на диване, написал бы. но уж очень влом.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.03.2015, 11:55   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А можете работоспособный пример написать?
Нет. Я ПаскаКАльщик.
А вот насчет MSDN верно подмечено: https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.03.2015, 12:04   #10
Адилич
 
Регистрация: 19.02.2015
Сообщений: 6
По умолчанию

Вообщем написанный выше код вполне работоспособный оказался, проблема в типе возвращаемой функции. Это просто пипец...
Адилич вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вытащить из рееста например имя компьютера средставми С/C++ androk Общие вопросы C/C++ 0 24.11.2011 19:20
Как получить уникальный номер компьютера? paravoz1k Общие вопросы Delphi 11 03.08.2011 17:01
Как получить имя файла? Maxx Microsoft Office Excel 4 02.09.2009 13:54
Как считать hostid и/или имя компьютера Ирина_28 Работа с сетью в Delphi 5 17.08.2009 09:03
Как получить имя файла Crazyman Работа с сетью в Delphi 4 11.07.2008 00:47