从“DWORD”到“const char *”的转换无效

时间:2012-03-17 02:22:33

标签: c++ winapi type-conversion

我正在尝试编译一些代码,但是我收到了一个错误:

  

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 *

2 个答案:

答案 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字符串作为它的第二个参数,因此您必须传递pidchar *类型的值,而不是char []

要显示pid的值,您可以使用sprintf

char * str = new char[10];
sprintf(str,"%d",pid);

您可能需要稍微修改str的大小(10可能太小,或者超过必要的大小 - 这取决于您和您的情况。)