错误:无法将char转换为wchat_t *

时间:2015-07-12 03:48:19

标签: c++ winapi c++builder-xe

我试图使用GetForegroundWindow和GetWindowText函数获取活动窗口标题,这是我的代码

HWND hwnd = GetForegroundWindow();
char wname[255];
GetWindowText(hwnd,wname,255);

每次我尝试构建项目时都会收到此错误消息“错误:错误:无法将char转换为wchat_t *”

我正在使用c ++ builder xe7

那么,出了什么问题?

2 个答案:

答案 0 :(得分:3)

您正在调用TCHARGetWindowText()。在“项目选项”中,您将" TCHAR地图设置为" 选项设置为wchar_t,因此GetWindowText()会映射到GetWindowTextW(),一个wchar_t*参数。这就是你无法传递char[]缓冲区的原因。

所以,你需要:

  1. " TCHAR地图更改为" 改为char,以便GetWindowText()映射到GetWindowTextA()代替(同样会影响每个人)您的代码中基于TCHAR的其他API函数调用。仅在将旧版Unicode前代码迁移到C ++ Builder 2009 +时使用此方法。

  2. 将代码更改为使用TCHAR代替:

    TCHAR wname[255];
    GetWindowText(hwnd,wname,255);
    
  3. 将代码更改为直接使用GetWindowText()的Ansi或Unicode版本:

    char wname[255];
    GetWindowTextA(hwnd,wname,255);
    

    wchar_t wname[255];
    GetWindowTextW(hwnd,wname,255);
    

答案 1 :(得分:0)

您正在以Unicode感知模式构建应用程序; char不足以容纳UTF-16字符。类型系统通过为您捕获这个来节省您从很多潜在的头痛。要么改为ASCII模式(简单但不好的解决方案),切换到使用宽字符串(恼人的解决方案),或者使用提供的宏在编译时根据构建参数进行选择(更烦人但最正确的解决方案)。

这是以上任何一种解决方案实现的代码片段:

HWND hwnd = GetForegroundWindow();
wchar_t wname[255];
GetWindowText(hwnd, wname, 255);

HWND hwnd = GetForegroundWindow();
TCHAR wname[255];
GetWindowTextW(hwnd, wname, 255);

如果您选择构建支持Unicode的应用程序(您应该这样做),您还必须记住使用wmain_tmain作为适用,而不是使用普通的无聊main。因为Windows。