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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2012, 13:34   #1
Azlk90
 
Регистрация: 06.02.2009
Сообщений: 3
По умолчанию из LPCSTR в LPCWSTR или как правильно их конвертировать ?

Доброго времени суток , хотелось бы узнать способы как из LPCSTR сделать LPCWSTR и желательно функции, гуглил что-то есть , но не особо вразумительного и примеров мало, очень буду рад почитать если был у вас опыт с ними?
Azlk90 вне форума Ответить с цитированием
Старый 07.01.2012, 13:49   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

покажите пример кода где у вас возникает проблема, ибо судя по всему у вас просто проблема с Юникодом.
http://programmersforum.ru/showthrea...hlight=Unicode
а если нужно менять во время работы программы кодировки, то
MultiByteToWideChar и WideCharToMultiByte.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 07.01.2012 в 13:58.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.01.2012, 14:44   #3
Azlk90
 
Регистрация: 06.02.2009
Сообщений: 3
По умолчанию

Писал по книге Шупака которая старая, тут удивило что вроде в TextOut определил тип переменной, а он свой тип требует . VS2010

Код:
////////////////////////////////////////////////////////////////////////////////////////////////
static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg , WPARAM wParam , LPARAM lParam)
{
	HDC hDC;
	PAINTSTRUCT ps;
	//LPTSTR text1[6];
	//LPCSTR* text1[6];
	wchar_t* text1[6];
	//_variant_t 
	char* text[6]=
	//LPCSTR* text1[6];
	//char* text[6]=
	{
		"Рассуждай",
		"Рассуждай токмо",
		"Рассуждай токмо о том",
		"Рассуждай токмо о том, о чем понятия",
		"Рассуждай токмо о том, о чем понятия твои тебе ",
		"Рассуждай токмо о том, о чем понятия твои тебе сие дозволяют"
	};


	 int x=20 , y=20;
	 SIZE size;
	 int nWidth , i;


	 switch(uMsg)
	 {
	case WM_CREATE:
		SetClassLong(hWnd, GCL_HBRBACKGROUND, (LONG) CreateSolidBrush(green));
		break;	
	case WM_PAINT:
		hDC=BeginPaint(hWnd, &ps);
		text1[5]=_T("Рассуждай токмо о том, о чем понятия твои тебе "),//>??????
		GetTextExtentPoint32(hDC, text1[5], wcslen(text1[5]),&size);
		nWidth = size.cx;

		for(i=0;i<6;i++)
		{
			
			TextJustOut(hDC, 100 ,y , text[i], nWidth);
			y+=size.cy+2;

		}
		EndPaint(hWnd, &ps);
		break;

		case WM_DESTROY:
		PostQuitMessage(0);
		break;

		default:
		return DefWindowProc(hWnd, uMsg,wParam, lParam);
	}
		return 0;

}
/////////////////////////////////////////////////////////////////////////////////
BOOL TextJustOut(HDC hDC, int x, int y, LPCSTR lpStr, int width, TCHAR breakChar=' ' )
{
	SIZE size;
	int nCount = strlen(lpStr);
	 
	SetTextJustification(hDC,0,0);
	GetTextExtentPoint32(hDC, lpStr, nCount, &size);

	int nBreak=0;
	for(int i=0;i<nCount; i++)
	{
		if(lpStr[i] == breakChar) 
			nBreak++;
		int breakExtra = width - size.cx;
		if (breakExtra < 0 ) breakExtra = 0 ;
		SetTextJustification(hDC, breakExtra, nBreak);
		return TextOut(hDC, x,y, lpStr,	nCount);
	}
}
>d:\project32\sketcher2\win32path1\ win32path1\textjust.cpp(124): error C2664: GetTextExtentPoint32W: невозможно преобразовать параметр 2 из "LPCSTR" в "LPCWSTR"
1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
1>d:\project32\sketcher2\win32path1 \win32path1\textjust.cpp(134): error C2664: TextOutW: невозможно преобразовать параметр 4 из "LPCSTR" в "LPCWSTR"
вот это он мне выводит
Azlk90 вне форума Ответить с цитированием
Старый 07.01.2012, 15:06   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

значит вы не ходили по ссылке.
я не хочу повторять то что разьяснил там.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.01.2012, 16:41   #5
Azlk90
 
Регистрация: 06.02.2009
Сообщений: 3
По умолчанию

По ссылке прошелся, но как такого ответа на вопрос ненашел. Спасибо большое. в Коде разобрался ошибка была немного в другой. Интересовало именно конкретное применение MultiByteToWideChar. для какой ситуации то и для какой другое.
Azlk90 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
_bstr_t -> LPCWSTR-> LPCTSTR->LPCSTR Lindemann66 Qt и кроссплатформенное программирование С/С++ 1 17.08.2011 16:45
COUNT с условием или как правильно построить запрос silent_lab SQL, базы данных 13 01.08.2011 12:00
Не правильно (или правильно?) работает позиционирование в WebKit mutabor HTML и CSS 5 09.12.2010 09:54
Unsafe code или как правильно использовать указатели jungle Общие вопросы Delphi 2 29.11.2010 11:43
Как получить размер строки типа LPCWSTR? Gtx541 Общие вопросы C/C++ 1 30.05.2010 14:18