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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2020, 15:16   #1
kubaru8
Новичок
Джуниор
 
Регистрация: 20.01.2020
Сообщений: 5
По умолчанию Вывод текста в Textbox

Добрый день.

Форумчане подскажите пожалуйста.

Есть функция для возврата наименования процессора. Пытаюсь вывести данную функцию в textbox - в поле записывается нуль.

Если отладить программу пошагово - то после передачи ссылки на символьную переменную данные теряются. Звучит бредово, но я не могу ничего с этим поделать...

Функция:
Код:
char *name(char *a)
{
	{
		char CPUString[0x20];
		
		char CPUBrandString[0x40];
		int CPUInfo[4] = { -1 };
		int nSteppingID = 0;
		int nModel = 0;
		int nFamily = 0;
		int nProcessorType = 0;
		int nExtendedmodel = 0;
		int nExtendedfamily = 0;
		int nBrandIndex = 0;
		int nCLFLUSHcachelinesize = 0;
		int nLogicalProcessors = 0;
		int nAPICPhysicalID = 0;
		int nFeatureInfo = 0;
		int nCacheLineSize = 0;
		int nL2Associativity = 0;
		int nCacheSizeK = 0;
		int nPhysicalAddress = 0;
		int nVirtualAddress = 0;
		int nRet = 0;

		int nCores = 0;
		int nCacheType = 0;
		int nCacheLevel = 0;
		int nMaxThread = 0;
		int nSysLineSize = 0;
		int nPhysicalLinePartitions = 0;
		int nWaysAssociativity = 0;
		int nNumberSets = 0;

		unsigned    nIds, nExIds, i;



		bool    bMultithreading = false;


		bool    bNestedPaging = false;
		bool    bLBRVisualization = false;
		bool    bFP128 = false;
		bool    bMOVOptimization = false;

		bool    bSelfInit = false;
		bool    bFullyAssociative = false;

		// __cpuid with an InfoType argument of 0 returns the number of
		// valid Ids in CPUInfo[0] and the CPU identification string in
		// the other three array elements. The CPU identification string is
		// not in linear order. The code below arranges the information 
		// in a human readable form.
		__cpuid(CPUInfo, 0);
		nIds = CPUInfo[0];
		memset(CPUString, 0, sizeof(CPUString));
		*((int*)CPUString) = CPUInfo[1];
		*((int*)(CPUString + 4)) = CPUInfo[3];
		*((int*)(CPUString + 8)) = CPUInfo[2];


		__cpuid(CPUInfo, 0x80000000);
		nExIds = CPUInfo[0];
		memset(CPUBrandString, 0, sizeof(CPUBrandString));

		// Get the information associated with each extended ID.
		for (i = 0x80000000; i <= nExIds; ++i)
		{
			__cpuid(CPUInfo, i);


			// Interpret CPU brand string and cache information.
			if (i == 0x80000002)
				memcpy(CPUBrandString, CPUInfo, sizeof(CPUInfo));
			else if (i == 0x80000003)
				memcpy(CPUBrandString + 16, CPUInfo, sizeof(CPUInfo));
			else if (i == 0x80000004)
				memcpy(CPUBrandString + 32, CPUInfo, sizeof(CPUInfo));
			else if (i == 0x80000006)
			{
				nCacheLineSize = CPUInfo[2] & 0xff;
				nL2Associativity = (CPUInfo[2] >> 12) & 0xf;
				nCacheSizeK = (CPUInfo[2] >> 16) & 0xffff;
			}
			else if (i == 0x80000008)
			{
				nPhysicalAddress = CPUInfo[0] & 0xff;
				nVirtualAddress = (CPUInfo[0] >> 8) & 0xff;
			}
			else if (i == 0x8000000A)
			{
				bNestedPaging = (CPUInfo[3] & 0x1) || false;
				bLBRVisualization = (CPUInfo[3] & 0x2) || false;
			}
			else if (i == 0x8000001A)
			{
				bFP128 = (CPUInfo[0] & 0x1) || false;
				bMOVOptimization = (CPUInfo[0] & 0x2) || false;
			}
		}
		a = CPUString;
		return  a;
	}
Вызов функции в С++ CLI

Код:
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e)
	{
		char *c;
		name(c);
		String^ stext = gcnew String(c);
		num3->Text = stext;

		/*c = name(); */
		/*num3->Text = System::Convert::ToString(ci);*/
	}
На Скрине 1: Зафиксировал момент создания ссылки на char переменную

На Скрине 2 : зафиксировал передачу верхнего char в функцию и копирования туда инфомрации из локальн ой переменной функции. Все передалось замечательно

На Скрине 3: Однако после выхода из функции значение char поменялось опять на нулевое. Что я делаю не так. Прошу помоги. Дайте направление куда нужно копать) Буду очень благодарен
Изображения
Тип файла: png 1.PNG (17.0 Кб, 25 просмотров)
Тип файла: png 2.PNG (9.0 Кб, 25 просмотров)
Тип файла: png 3.PNG (14.7 Кб, 25 просмотров)
kubaru8 вне форума Ответить с цитированием
Старый 20.01.2020, 18:11   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от kubaru8 Посмотреть сообщение
Код:
a = CPUString;
return  a;
Что, по вашему, должен делать этот код?
waleri вне форума Ответить с цитированием
Старый 20.01.2020, 18:33   #3
kubaru8
Новичок
Джуниор
 
Регистрация: 20.01.2020
Сообщений: 5
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Что, по вашему, должен делать этот код?
По моему, он должен скопировать данные из переменной CPUstring в передаваемую переменную "a". И далее эта переменная возвращается обратно из функции. Хотя по сути можно ее не возвращать... Но на всякий случай написал... Или я что то упускаю из виду?) слона по видимому)
kubaru8 вне форума Ответить с цитированием
Старый 20.01.2020, 18:36   #4
kubaru8
Новичок
Джуниор
 
Регистрация: 20.01.2020
Сообщений: 5
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Что, по вашему, должен делать этот код?
Ранее я писал так:

Код:
return CPUString;
а при вызове функции использовал такое выражение:

Код:
char* c=name();
Т.е. возвращал CPUstring в переменную с. Однако на моменте перемещения данные туда просто не передаются... Я не понимаю, где я ошибаюсь...
kubaru8 вне форума Ответить с цитированием
Старый 20.01.2020, 18:38   #5
kubaru8
Новичок
Джуниор
 
Регистрация: 20.01.2020
Сообщений: 5
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Что, по вашему, должен делать этот код?
waleri, Прошу если у Вас есть хоть намек на разрешение моей проблемы, укажите его пожалуйста. я много времени уже потратил на эту функцию, но не могу понять в чем проблема
kubaru8 вне форума Ответить с цитированием
Старый 20.01.2020, 19:58   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от kubaru8 Посмотреть сообщение
возвращал CPUstring в переменную с
Вы понимаете разницу между "переменная" и "указатель на переменную"?

Цитата:
Сообщение от kubaru8 Посмотреть сообщение
не могу понять в чем проблема
Прочитайте про "область действия переменной"
waleri вне форума Ответить с цитированием
Старый 20.01.2020, 20:45   #7
kubaru8
Новичок
Джуниор
 
Регистрация: 20.01.2020
Сообщений: 5
По умолчанию

waleri,
Цитата:
Сообщение от waleri Посмотреть сообщение
Вы понимаете разницу между "переменная" и "указатель на переменную"?


Прочитайте про "область действия переменной"
Да, ошибку нашел. информацию о проце вывел, спасибо
kubaru8 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод русского текста в textbox Flame20 Общие вопросы C/C++ 0 05.06.2012 21:59
Textbox и выравнивание текста alezha C# (си шарп) 1 01.11.2011 02:48
ввод и вывод текста в textBox SUDALV Windows Forms 15 06.03.2011 16:27
c++ вывод текста из textbox 0479 Помощь студентам 3 15.09.2010 01:23
Автосохранение текста в TextBox`ах B00lean Microsoft Office Word 2 27.03.2009 00:46