我正在尝试编译一些代码,但是我收到了一个错误:
从
DWORD
转换为const char *
无效转换错误
这是我正在尝试编译的代码:
hWindow = FindWindow(NULL, "Window");
if (hWindow){
GetWindowThreadProcessId(hWindow, &pid);
}
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
if(hProcess != NULL) {
SetWindowText(GetDlgItem(MyWindow, MyStatic), pid);
}
如何将DWORD
转换为const char *
?
答案 0 :(得分:4)
SetWindowText
需要一个const char *
(即一个C字符串)并且你传给它一个数字(pid
),很明显你会收到一个错误。
执行转换的标准C ++方法是使用字符串流(来自标题<sstream>
:
std::ostringstream os;
os<<pid;
SetDlgItemText(MyWindow, MyStatic, os.str().c_str());
(此处我使用SetDlgItemText
而不是GetDlgItem
+ SetWindowText
来保存输入,但这是相同的事情)
或者,您可以使用snprintf
。
char buffer[40];
snprintf(buffer, sizeof(buffer), "%u", pid);
SetDlgItemText(MyWindow, MyStatic, buffer);
答案 1 :(得分:1)
在这一行
SetWindowText(GetDlgItem(MyWindow, MyStatic), pid);
pid
是一个DWORD(正如您在GetWindowThreadProcessId(hWindow, &pid)
中使用的那样,它将LPDWORD
作为第二个参数)。但是,SetWindowText
需要一个C字符串作为它的第二个参数,因此您必须传递pid
或char *
类型的值,而不是char []
。
要显示pid
的值,您可以使用sprintf
:
char * str = new char[10];
sprintf(str,"%d",pid);
您可能需要稍微修改str
的大小(10可能太小,或者超过必要的大小 - 这取决于您和您的情况。)