Std:string в Lpctstr

  • Автор темы DmitryTarasov
  • Дата начала
D

DmitryTarasov

#1
В 6-е работала конструкция:

LPCTSTR pszName;
std::string m_strName

m_strName = pszName;

Как в 2005 под уникодом выполнить это же, если переобъявлять ничего нельзя?
 
D

DmitryTarasov

#4
Конвертируйте строки при помощи WideCharToMultiByte
Вот такой вариант не работает - выдает билеберду, хоть и компилится:
Код:
bool CFlatPopupMenu::AppendItem(const DWORD dwFlags,LPCTSTR pszName,const UINT itemid,const int icon)
{
CItem item;
LPSTR ss;
LPBOOL b;

item.m_dwFlags=dwFlags;

if (pszName)
{
pszName=(LPCTSTR)"52345";
WideCharToMultiByte(CP_ACP,0,pszName,5,ss,15,"!",b);
item.m_strName = ss; //std::string	 m_strName;

}

item.m_ItemID=itemid;
item.m_IconIndex=icon;
item.m_pPopup=NULL;

m_Items.push_back(item);
return true;
}
 
04.09.2006
2 566
3
#5
Для приличия в MSDN могли заглянуть.
Код:
#include <windows.h>
#include <winnls.h>
#include <tchar.h>
#include <stdio.h>

BOOL Convert(const TCHAR* wszBuffer, CHAR* szBuffer)
{
int Length = ::WideCharToMultiByte(CP_UTF8, 0, wszBuffer, -1, NULL, 0, NULL, NULL);

if( szBuffer == NULL ) szBuffer = new char[Length];
memset(szBuffer, 0, Length);

return ::WideCharToMultiByte(CP_UTF8, 0, wszBuffer, -1, szBuffer, Length, NULL, NULL);
}

int main()
{
TCHAR Input[10] = _T("Input");
char Output[10];

BOOL Converted = Convert(Input, Output);
printf(Converted ? Output : "failed");
}