首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

大牛们,救灾,呼告 !char * 转换成LPCTSTR

2013-11-01 
大牛们,救急,呼告 !char * 转换成LPCTSTRchar * 转换成LPCTSTR该怎么转啊?下面这两种均不管用。求有效的方

大牛们,救急,呼告 !char * 转换成LPCTSTR
char * 转换成LPCTSTR该怎么转啊?下面这两种均不管用。求有效的方法
1、
LPCTSTR lpszToPath = L"test";
2、
const char *buf = "test";
LPCTSTR *lpszFromPath = (LPCTSTR *)buf;
[解决办法]
   LPCTSTR lpszToPath;
   char * a="hello";
   lpszToPath =(LPCTSTR)a ;
[解决办法]
在哪里用?是api函数吗?
[解决办法]

引用:
Quote: 引用:

   LPCTSTR lpszToPath;
   char * a="hello";
   lpszToPath =(LPCTSTR)a ;


这个我试过了,无效的。
你多了一个指针符*
[解决办法]
LPC 为C类型Long指针  TSTR 是一个可变的东西。
LPCTSTR 是一个宏,在不同的编译器不同的编译环境中,可能被解析为不同的内容。

可能为 const char * 也可能为 const wchar_t * ; 

char * 转换成LPCTSTR该怎么转啊? 
这个问题,如果LPCTSTR = const char * 问题就不存在了,出现了,就表示
LPCTSTR = const wchar_t* 
那么楼主的问题就成了: char * 如何转换成const wchar_t* 
我们知道char * 强制转换成const wchar_t* ,会出现乱码,甚至越界等未知行为因为 char*用一个字节0结束,而wchar_t*用两个字节0结束。所以char * 是不能强制转换成wchar_t* 的。必须重新编码:

char *a="test";
WideString b = a ;
LPCTSTR p = b.c_bstr();

重新编码后,注意一下生命期被改变。
[解决办法]
LPCTSTR 根据工程中是否定义 _UNICODE 决定映射成 char * 还是 wchar_t *

拆开这个词:
LP 是 long point 意为指针
C 是 const
T 是 TCHAR
STR 是字符串
[解决办法]
一定要这样转化 程序就埋下了乱码及崩溃的可能性。

 char * p = "Test" ; 
  wchar_t *p = *(wchar_t **)&p ; //这样强制转换。

这就如,我就特意让我写的程序可能乱码及死掉。

[解决办法]
在C++builder XE的编译器里,可以进行设置,来确定映射成 char * 还是 wchar_t *,如下设置:
Project->Option->C++(Shared Options) 右边的_TCHAR maps to 选成char 即可。
我想在VS2010中也会有类似的设置
[解决办法]
void CharToWChar(LPCSTR lpcszStr, LPWSTR lpwszStr)
{
DWORD dwMinSize;
dwMinSize = MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, NULL, 0);
MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, lpwszStr, dwMinSize);  
}

热点排行