initializing a LPCTSTR /LPCWSTR
initializing a LPCTSTR /LPCWSTR
我很难理解并使其正常工作。基本上,归根结底是我无法成功初始化这种类型的变量。它需要具有7&2E25DC9D&0&USB003
的内容。
有人能解释/展示这种类型的正确初始化和类似的值吗?我已经查看了这个网站上的所有帮助,将我的项目属性从unicode更改为multibyte并不能解决这个问题,其他解决方案也不适用于我。
就我的代码而言,以下是我开始初始化的方式:
LPCTSTR portvalue = new TCHAR[100];
正如您所收集的,LPCTSTR
和TCHAR
基本上定义如下(LPCTSTR
将被读取为常量TCHAR
的长指针):
#ifdef _UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif // _UNICODE
typedef const TCHAR* LPCTSTR;
因此,您可以像初始化const wchar_t*
或const char*
变量一样初始化LPCTSTR
变量,例如,对于unicode:
LPCTSTR lpszUnicode = L"Test String";
对于ASCII/MultiByte:
LPCTSTR lpszMultibyte = "Test String";
然而,在使用WinAPI时,也有一些有用的宏:_T("x")
和TEXT("x")
,它们都可以扩展为L"x"
(如果您的项目设置为Unicode)或"x"
(如果项目属性设置为Multibyte)。例如,您可以使用:
LPCTSTR lpszTest = _T("Test String");
LPCTSTR lpszTest2 = TEXT("Test String 2");
这将在unicode或多字节项目设置下编译。至于有多个宏扩展到同一个东西的原因,请查看这篇博客文章。
您也可以通过动态分配内存来完成您正在做的事情,例如:
LPTSTR lpszDynamic = new TCHAR[100];
// Do something with lpszDynamic
delete[] lpszDynamic;
然而,如果您发现自己经常这样动态分配内存,那么最好使用字符串类,如CString
或std::string
/std::wstring
(我在MFC/WinAPI项目中经常有以下内容):
namespace std {
#ifdef _UNICODE
typedef wstring tstring;
#else
typedef string tstring;
#endif // _UNICODE
};
根据这个答案,您必须在文字前面加上L
LPCWSTR a = L"TestWindow";
正如Frederic所指出的,您可以通过以下方式初始化LPCTSTR
:
LPCTSTR s = _T("TestWindow");
相关文章:
- 如何在Windows上将Qt QString转换为LPCTSTR
- C++ 在参数中将字符串转换为 LPCWSTR
- 'Cannot add two pointers'添加带有 WCHAR 的 LPCWSTR
- 将 LPSTR 转换为 LPCTSTR
- CPP Windows 字符串转换混淆了 CStringA 和 LPCWSTR
- 无法从'const char *'转换为'LPCTSTR'
- 代码 c++ VS 2010 中的 LPCWSTR 到字符串转换问题
- 以 LPCTSTR 开头编写另一行文本的最佳方法是什么?
- 无法将常量字符 [16] 转换为 LPCWSTR
- LPCWSTR 查找和替换为转义字符
- 如何在 C++(MFC) 中将 char* 转换为 LPCTSTR
- 类型 "const char *" 的参数与类型 "LPCWSTR" 的参数不兼容
- 将浮点数转换为 LPCTSTR 转换
- 无法将参数 2 从 'const char [5]' 转换为 'LPCWSTR'
- 将WCHAR转换为LPCTSTR
- 将cryptopp :: Integer转换为lpctstr
- 仅分配第一个字符,将 LPCTSTR 转换为字符*
- 使用 std::文件系统输出作为 LPCWSTR
- 如何转换LPCWSTR和CHAR
- initializing a LPCTSTR /LPCWSTR