Как исправить & quot; Программа выдала команду, но длина команды неверна. & Quot; ошибка при вызове Process32First ()?

GetLastError говорит мне, что я получаю сообщение «Программа выдала команду, но длина команды неверна». ошибка при вызове Process32First () (см. код ниже). Я нашел один пост, который выглядел полезным (http://social.msdn.microsoft.com/Forums/is/vcgeneral/thread/6f43716f-fdd3-4c92-bfba-6a23178c32bf), но я не уверен, что это моя проблема ,

Я пытался создать программу, которая включает в себя только "stdafx.h", <iostream>, <Windows.h> а также <TlHelp32.h> тестировать __alignof(PROCESSENTRY32), но я все равно получаю значение 4. Не уверен, правильно это или нет.

Вот код, который терпит неудачу:

HANDLE hProcess;
PROCESSENTRY32 pe32;

cout << "Size of PROCESSENTRY32 is: " << sizeof(PROCESSENTRY32) << "\r\n"; // 556
cout << "Align of PROCESSENTRY32 is: " << __alignof(PROCESSENTRY32) << "\r\n"; // 4

if ( !(hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)) ) {
cout << "CreateToolhelp32Snapshot() failed: " << GetLastError() << "\r\n";
return (HANDLE)NULL;
} else {
cout << "CreateToolhelp32Snapshot() succeeded.\r\n";
}

if (Process32First(hProcess, &pe32)) {
do {
cout << pe32.th32ModuleID;
} while (Process32Next(hProcess, &pe32));
} else {
cout << "Process32First() failed: " << GetLastError() << "\r\n";
}

2

Решение

Из документов на Process32First:

Вызывающее приложение должно установить член dwSize в PROCESSENTRY32 равным размеру структуры в байтах.

Я не вижу, что вы делаете это в своем коде, и я подозреваю, что это проблема. Почини это:

pe32.dwSize = sizeof pe32;
if (Process32First(...))

Причиной этого обязательного действия для многих структур winapi является гибкость, позволяющая позже добавить больше в структуру, но пусть функции узнают, какая версия используется, проверив соответствие известным размерам предыдущих версий.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector