我正在尝试创建一个只返回TCHAR或LPCWSTR的函数,我无法处理它,不知道为什么!
我的代码如下:
TCHAR MainClass::GetString(){
if (hWnd == NULL)
return NULL;
TCHAR name[256];
GetWindowText(hWnd, name, 256);
MessageBox(NULL, (LPCWSTR)(name), L"Testing this!", MB_OK);
return name[256];
}
如果我运行此代码,它会显示一个消息框,就像我想要的消息一样,但返回的是一个空白字符串。
如果我尝试返回LPCWSTR,它也会返回空白,我在这里做错了什么?
- 修改
TCHAR* MainClass::GetString(){
if (hWnd == NULL)
return NULL;
TCHAR name[256];
GetWindowText(hWnd, name, 256);
return (TCHAR *)malloc(sizeof(name));
}
答案 0 :(得分:2)
您的函数返回TCHAR
,它将是单个char
或单个wchar_t
,具体取决于是否定义了UNICODE
。
语句return name[256]
返回从name
数组开头偏移256处的单个字符。这意味着您将返回单个TCHAR
一个超过数组末尾的。这就是为什么你没有得到你期望的字符串。
您无法声明自动堆栈变量并从函数返回指向它的指针 - 当函数退出时,它会超出范围。
您可能想要malloc()
字符串,向其返回TCHAR*
,然后在调用函数中free()
。
答案 1 :(得分:0)
试试这个:
std::basic_string<TCHAR> MainClass::GetString()
{
TCHAR name[256] = {0};
int len = GetWindowText(hWnd, name, 256);
return std::basic_string<TCHAR>(name, len);
}
或者这个:
std::basic_string<TCHAR> MainClass::GetString()
{
int len = GetWindowTextLength(hWnd);
if (len == 0) return std::basic_string<TCHAR>();
std::vector<TCHAR> name(len+1);
len = GetWindowText(hWnd, &name[0], name.size());
return std::basic_string<TCHAR>(&name[0], len);
}
无论哪种方式,你都可以这样做:
std::basic_string<TCHAR> name = GetString();
可替换地:
int MainClass::GetString(LPTSTR name, int maxlen)
{
return GetWindowText(hWnd, name, maxlen);
}
TCHAR name[256];
int namelen = GetString(name, 256);