PSD
							
								Главный специалист 
								
								 
								  Offline
								Пол:   
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 «  : 01-09-2003 06:29 »   | 
								
								 | 
							  
							 
							VC 6.0 Проект  ActivX Есть не обходимость писать код который будет компилися как с Уникодом нак и без него. Нужен пример как  проще оформить куски такого вида char s[10]; double b; s[0]='Y'; s[1]=':'; b=psdg->MGD.Zero-(((double )psdg->m_CGP.Y)/psdg->MGD.DY  )  ; gcvt(b,8,&s[2]); pDC->ExtTextOut( 5,5+DY+5,ETO_CLIPPED,r,s,8,NULL) ;   Чтобы компилилось как в юникоде так и безнего.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 19-12-2007 19:53 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
							 
							Да да нет нет все остальное от лукавого. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							SlavaI
							
								Главный специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 01-09-2003 07:00 »   | 
								
								 | 
							  
							 
							TCHAR s[10];  double b;  s[0]=TEXT('Y');  s[1]=TEXT(':');  b=psdg->MGD.Zero-(((double )psdg->m_CGP.Y)/psdg->MGD.DY  )  ;  gcvt(b,8,&s[2]);  pDC->ExtTextOut( 5,5+DY+5,ETO_CLIPPED,r,s,8,NULL) ;
  что такое gcvt не знаю. Остальные ф-ции должны иметь как ANSI так и UNICODE версии и выбираются они на этапе компиляции в зависимости от того определена переменная UNICODE или нет. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							PSD
							
								Главный специалист 
								
								 
								  Offline
								Пол:   
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 01-09-2003 07:11 »   | 
								
								 | 
							  
							 
							gcvt  это функция типа itoa конвертит double в текстовую строку.  s[0]=TEXT('Y'); 
 
 А TEXT() и _Т() это  одно и тоже?  Или нет. Я посмотрел по исходникам получается что при включении юникода  TCHAR обявляется как WCHAR и все дела?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Да да нет нет все остальное от лукавого. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							SlavaI
							
								Главный специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 01-09-2003 07:14 »   | 
								
								 | 
							  
							 
							 А TEXT() и _Т() это одно и тоже
 
 Посмотри как они объявлены, это же #define обыкновенный.  TCHAR обявляется как WCHAR и все дела?
 
 А ты чего хотел?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Гром
							
								Птычк. Тьфу, птычник... Вот! 
								Готовлюсь к пенсии
								
								  
								  Offline
								Пол:   
								Бодрый птах
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 01-09-2003 09:07 »   | 
								
								 | 
							  
							 
							PSD - TEXT(), _T(), L() - это макросы кодирующие строку из однобайтной в двубайтную...
  Я бы сделал так 
 
  #ifdef UNICODE  #define MYCHAR char #else #define MYCHAR TCHAR #endif
  После чего определил бы UNICODE в установках проекта для компиляции в юникод и наоборот.
  Конечно придется передевайнить еще и strstr strcpy и т.д. - т.е. все тобой используемые функции так же как тип переменной, для различных вариантов использую для юникода функции из абора wcsstr вместо strstr и т.д.
  Я обычно создавал дирректорию common в которую витыкал файл .h с описаниями таких вот штук.... 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							А птичку нашу прошу не обижать!!! 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Serega
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 01-09-2003 09:53 »   | 
								
								 | 
							  
							 
							Попробуй так double d = ...; _bstr_t str = _T)"Y{": + _bstr_t)_variant_t)d::;
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							dorador
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 01-09-2003 09:55 »   | 
								
								 | 
							  
							 
							Тема использования Unicode не плохо освещена у Рихтера в его "Windows для профи" еще я читал про это у Румянцева "Азбука программирования Win32 API" я вывел для себя следующие правила 1. вместо string.h использовать tchar.h 2. вместо char использовать TCHAR 3. строковые литералы обрамлять макросом _T() 4. вместо привычных функций работы со строками, типа strcpy, использовать макросы из tchar.h, типа _tcscpy что касается приведенного фрагмента кода, то ИМХО лучше вместо  char s[10(;  double b;  s[0(='Y';  s[1(='{';  ... _gcvt)b,8,&s[2(:;  использовать #include <tchar.h> ... TCHAR s[10(;  double b;  ... _stprintf)s, _T)"Y=%f":, b:; во всяком случае _gcvt всегда независимо от определения макросов _UNICODE и UNICODE сформирует не Unicode, а ANSI строку  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Гром
							
								Птычк. Тьфу, птычник... Вот! 
								Готовлюсь к пенсии
								
								  
								  Offline
								Пол:   
								Бодрый птах
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 01-09-2003 09:58 »   | 
								
								 | 
							  
							 
							 _UNICODE и UNICODE сформирует не Unicode, а ANSI строку
 
 Я не имел ввиду системный макрос  а говорил о собственном определении типа данных - т.е. используется или не используется UNICODE .  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							А птичку нашу прошу не обижать!!! 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Serega
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 01-09-2003 10:07 »   | 
								
								 | 
							  
							 
							А зачем придумывать какие-то макросы, использовать не переносимые функции, когда все эти проблемы уже решены до нас 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							SlavaI
							
								Главный специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 01-09-2003 10:16 »   | 
								
								 | 
							  
							 
							 Это как ?
 
 А у меня так- я вобще не пишу не UNICODE программы для Windows NT/2k/XP/2003. И не мучаюсь.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							dorador
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 01-09-2003 10:23 »   | 
								
								 | 
							  
							 
							А зачем придумывать какие-то макросы, использовать не переносимые функции, когда все эти проблемы уже решены до нас Если рассматривать проблему относительно Win32, а не ActivX то она решена до нас именно применением макросов из tchar.h  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							PSD
							
								Главный специалист 
								
								 
								  Offline
								Пол:   
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 01-09-2003 10:59 »   | 
								
								 | 
							  
							 
							 А у меня так- я вобще не пишу не UNICODE программы для Windows NT/2k/XP/2003. И не мучаюсь.
 
 У меня тут половина 95/98 поэтому приходися иметь покрайней мере две версии.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Да да нет нет все остальное от лукавого. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							dorador
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 01-09-2003 11:27 »   | 
								
								 | 
							  
							 
							 У меня тут половина 95/98 поэтому приходися иметь покрайней мере две версии.
 я тоже работаю и под 98/Me и под 2000/XP, но делаю одну неUnicode версию а применение tchar.h рассматриваю как задел на будущее (вдруг мелкомягкие вовсе откажутся от ANSI, тем более в CE они это уже сделали)  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Гром
							
								Птычк. Тьфу, птычник... Вот! 
								Готовлюсь к пенсии
								
								  
								  Offline
								Пол:   
								Бодрый птах
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 01-09-2003 12:04 »   | 
								
								 | 
							  
							 
							 Если рассматривать проблему относительно Win32, а не ActivX  то она решена до нас именно применением макросов из tchar.h
 
 Очень интересно... У меня есть 2000 строк кода рботы с char и мне надо их перевести на TCHAR и работу с юникодом. Давай ка автоматизируй одним include "tchar.h" весь этот процесс...  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							А птичку нашу прошу не обижать!!! 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							dorador
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #14 : 01-09-2003 14:34 »   | 
								
								 | 
							  
							 
							 автоматизируй одним include "tchar.h" весь этот процесс
 
 А кто говорил что это делается автоматически включением include "tchar.h" я говорил про применение макросов из него  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Гром
							
								Птычк. Тьфу, птычник... Вот! 
								Готовлюсь к пенсии
								
								  
								  Offline
								Пол:   
								Бодрый птах
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #15 : 01-09-2003 14:50 »   | 
								
								 | 
							  
							 
							Тогда разберись с тем, что я написал. Я написал, что можно автоматизировать употребление макросов TCHAR.H и стандратных вызовов функций str*** с помощью #define собственного ФЛАГА (а не макроса), и дополнительного .h файла в котором переопределить употребление вместо str*** wcs*** из файла tchar.h в зависимости от использования кода...
  Пример
  // 
  #ifndef __common_h #define __common_h
  #ifdef UNICODE_COMPILE MYCHA TCHAR #define strstr wcsstr ...... #else MYCHAR char #endif
  Таким образом переделка текста в 5 - 10 тыш строк приводится к действию во всех файлах - замена char -> MYCHAR Find+Replace
  Подключения common.h во все места куда надо и определения флага UNICODE_COMPILE в проекте = 1....
  То что я написал чуть попроще прежде.
  Теперь посоветуй метод проще - я хотел бы его знать ибо это вопрос нетревиальный (без издевки или иронии), потому как я не впервый раз проекты перерабатываю из - за таких вещей...
 
  ПыСы Правда в этот метод не подойдут алгоритмы с смещением и редактированием строк с побайтной работой, так как замена на двух байтный юникод потребует изменение цифровых коэффициентов - расчитываемых с учетом 1 - го байта на символ и не с помощью стандартных процедур... 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							А птичку нашу прошу не обижать!!! 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							dorador
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #16 : 01-09-2003 15:34 »   | 
								
								 | 
							  
							 
							 Теперь посоветуй метод проще - я хотел бы его знать ибо это вопрос нетревиальный (без издевки или иронии), потому как я не впервый раз проекты перерабатываю из - за таких вещей... 
 
 Полностью согласен, что твой метод замены   #define strstr wcsstr 
 
 при перерабатывании готовых проектов ЛУЧШИЙ я говорил про новые проекты хотя от твоего дополнительного хедера я бы не отказался    у него есть то преимущество, что можно пользоваться привычными функциями :!:  microsoft  тут явно тормознула P.S.   а можно char так же переопределить :?: тогда   char -> MYCHAR Find+Replace 
 
  делать не надо было бы  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Гром
							
								Птычк. Тьфу, птычник... Вот! 
								Готовлюсь к пенсии
								
								  
								  Offline
								Пол:   
								Бодрый птах
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #17 : 01-09-2003 16:13 »   | 
								
								 | 
							  
							 
							 P.S. а можно char так же переопределить  тогда 
 
 Да действительно - а про char хедер - к сожалению он переопределятся в огромном файле коммерческого проекта - если выкрою время, то я вытащу и опубликую...  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							А птичку нашу прошу не обижать!!! 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							dorador
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #18 : 05-09-2003 13:42 »   | 
								
								 | 
							  
							 
							с переопределением char это уже я тормознул :?  Люди ! а какая реальная причина использования UNICODE ? Win CE или что-то другое? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #19 : 05-09-2003 14:12 »   | 
								
								 | 
							  
							 
							Например, если на компьютере, на котором ты запускаешь программу, системный шрифт и локаль не русские, то без unicode будут еггоглифы   Конечно, если текст с кириликой. Вот англопишуших это совсем не беспокоит...  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Diletant
							
								Помогающий 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #20 : 05-09-2003 15:36 »   | 
								
								 | 
							  
							 
							P.S. а можно char так же переопределить  тогда С переопределением char или BYTE все не так просто. По крайней мере, для сетевых проектов, где команды протоколов должны быть  строками с однобайтными символами. Или для всевозможных почтовых утилит.  Поэтому IMHO метод с TCHAR  предпочтительней, посколькупозволяет сразу отделить переменные, для которых Unicode использовать нельзя.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							dorador
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #21 : 05-09-2003 16:02 »   | 
								
								 | 
							  
							 
							 Например, если на компьютере, на котором ты запускаешь программу, системный шрифт и локаль не русские, то без unicode будут еггоглифы   Конечно, если текст с кириликой. 
 
 А что если unicode-прогу с русским интерфейсом запустить на компе, где никакие языки кроме английского не установлены, на экране будет кириллица?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									«  Ответ #22 : 05-09-2003 18:12 »    | 
								
								 | 
							  
							 
							Нет конечно - но это уже будет не твоя вина     
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	 |