Неверное преобразование из DWORD в const char * - PullRequest
0 голосов
/ 17 марта 2012

Я пытаюсь скомпилировать некоторый код, но получаю ошибку:

Ошибка неверного преобразования из 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 ]

4 голосов
/ 17 марта 2012

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 голос
/ 17 марта 2012

В этой строке

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 может быть слишком маленьким или больше необходимого - это зависит от вас и вашей ситуации).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...