Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 17.08.2015
Сообщений: 53

Странная работа Visual Studio

19.07.2021, 21:28. Показов 2319. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте дорогие специалисты. В процессе изучения прекрасного языка C++, столкнулся с проблемой. Ситуация такая. Для развития пытался получить список запущенных процессов и вывести его в консоль. На DevCPP все работает. На Visual Studio работает пропуская большую часть кода. Windows 10 х64, Visual Studio 2019 16.10.3. Консольное приложение. Даже при работе отладчик пропускает код, начиная с HANDLE. До него, все работает правильно. Что это может быть и как его решить? ПС: Всяческие Тест и int a, исключительно для теста. Отладка идет до HANDLE и перескакивает на SystemProces = CreateToolhelp32Snapshot(TH32CS_SNAPPROC ESS, 0);, затем на cout << "Тест3" << endl; Где копать? Повторю, на DevCPP все работает правильно!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <Windows.h>
#include <tlhelp32.h>
 
using namespace std;
 
int main()
{
    system("color 1F");
    setlocale(LC_ALL, "Russian");
    cout << "Тест1" << endl;
    int a = 1;
    cout << a << endl;
    HANDLE SystemProces;
        PROCESSENTRY32 ProcesList;
 
            SystemProces = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
            if (SystemProces == NULL)
                {
                    cout << "Неизвестная ошибка." << endl;
                    system("pause");
                    return 0;
                }
                
                    else if (Process32First(SystemProces, &ProcesList))
                        {
                            do {
                            cout << "Тест2" << endl;
                                cout << ProcesList.szExeFile << endl;
                            } while (Process32Next(SystemProces, &ProcesList));
                        }
    cout << "Тест3" << endl;
            system("pause");
 
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.07.2021, 21:28
Ответы с готовыми решениями:

Работа с Visual Studio
Пожалуйста, подскажите как компилить в этой среде. Да и вообще, урок-другой по среде &quot;Мелкомягких&quot; не помешает. Кстати, версия -...

Работа в Visual Studio
Подскажите, где можно почитать о приёмах работы и отладке программ в Visual Studio с самых базовых моментов, т.е. для новичков. Спасибо.

В коде возникли ошибки при переходе с Visual studio 2013 на Visual studio 2017
Добрый день, решил попробовать поменять свою 2013 студию на 2017 и заметил такую проблему, при открытии проектов 13 года и даже копирования...

24
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
20.07.2021, 14:36
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Shandera Посмотреть сообщение
это работает и без этого.
Нет, не работает.

И вообще вы путаетесь в показаниях.
Вы выше написали
Цитата Сообщение от Shandera Посмотреть сообщение
Использовав ваш код, получил другую проблему. В консоль выводится просто абракадабра!
А его код (и мой тоже) содержали исправление касательно dwSize.
Если верить стартовому посту, то сначала проблема была в том, что
Цитата Сообщение от Shandera Посмотреть сообщение
На Visual Studio работает пропуская большую часть кода.
После того, как исправили dwSize, стало выводить "абракадабру", которую вы уже исправили выставив многобайтовую кодировку проекта.

Так что нет, не работает без dwSize.
И да, когда "работает" за счет случайного совпадения мусора с нужным значением - это тоже "не работает".
1
0 / 0 / 0
Регистрация: 17.08.2015
Сообщений: 53
20.07.2021, 15:04  [ТС]
DrOffset, Вы все верно говорите, но если более внимательно прочитать мой первый пост, то я говорил: "Мой код" работает в DevCpp, а на Visual Studio нет. После того, как огромное спасибо Всем Вам, мне дали другой код, он отработл, но вывел аброкадабру. И мне посоветовали сменить Юникод на.... После чего я написал, что и "мой" и Ваш код работает корректно. Вот скрин, как отрабатывает мой код, в котором нет ProcesList.dwSize = sizeof(PROCESSENTRY32);. Я конечно же добавил эту строчку, что бы все было по канонам. Мне просто было интересно, зачем оно нужно, если оно и так работает. Мне в целом объяснили, за что я всем Вам очень благодарен. Я просто учусь и очень любознателен ко всему, что происходит в коде. Я пытаюсь прочитать по каждой строчке информацию, что бы быть в курсе, как оно работает. Просто когда изучал документацию по вашему совету на сайте Майкрософта, и натолкнулся на эту строку. Прочитал комментарий и обратил внимание, что в моем случае отработало и без этого. Меня это просто заинтересовало. Редко можно попасть на такую ситуацию. Обычно компилятор, особенно VS не пропускает, если что то не по канонам. Простое человеческое любопытство по теме. Не более того. А всем Вам громадное спасибо за помощь, хотя не совсем понятно, почему среда пропускает работу без этой строчки.
Миниатюры
Странная работа Visual Studio  
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
20.07.2021, 15:12
Цитата Сообщение от Shandera Посмотреть сообщение
почему среда пропускает работу без этой строчки.
https://en.cppreference.com/w/cpp/language/ub
https://en.wikipedia.org/wiki/Undefined_behavior
https://ru.wikipedia.org/wiki/... _поведение
Еще не раз с этим столкнетесь.
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
20.07.2021, 19:48
Цитата Сообщение от Shandera Посмотреть сообщение
это работает и без этого. И мой код, без этого тоже работает.
Цитата Сообщение от Shandera Посмотреть сообщение
Вот скрин, как отрабатывает мой код, в котором нет ProcesList.dwSize = sizeof(PROCESSENTRY32);. Я конечно же добавил эту строчку, что бы все было по канонам. Мне просто было интересно, зачем оно нужно, если оно и так работает.
Это не более чем случайность. То есть вам просто показалось. Нет, "без этого" ваш код НЕ работает.

Цитата Сообщение от Shandera Посмотреть сообщение
Обычно компилятор, особенно VS не пропускает, если что то не по канонам.
"Обычно"? Где вы видели компиляторы, которые умеют отлавливать нарушения требований внешних API??? Это - ошибка времени выполнения, причем ошибка не диагностируемая в принципе. Компилятор здесь ни при чем.
1
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
22.07.2021, 00:15
Цитата Сообщение от Shandera Посмотреть сообщение
для чего это делается, если (грубо говоря) итак все работает?
а как ядро будет обрабатывать пользовательский контекст без выделенной памяти под размер структуры?

всё элементарно просто (лишний код из сурков я упущу, чтобы проще было увидеть логику)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#define STATUS_INFO_LENGTH_MISMATCH 0xC0000004
 
ULONG NTAPI BaseSetLastNTError(NTSTATUS result)
{
    ULONG ret;
 
    ret = RtlNtStatusToDosError(result);
    RtlSetLastWin32Error(ret);
 
    return ret;
}
 
BOOL WINAPI Process32FirstW(HANDLE hSnapshot, LPPROCESSENTRY32W lppe)
{
    NTSTATUS result;
 
    if (!lppe || lppe->dwSize != 568)
    {
        result = STATUS_INFO_LENGTH_MISMATCH;
        BaseSetLastNTError(result);
 
        return FALSE;
    }
 
    else
    {
        memset(&lppe->cntUsage, 0, lppe->dwSize - 4);
        RtlSetLastWin32Error(ERROR_NO_MORE_FILES);
    }
 
    return TRUE;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.07.2021, 00:15

Имеются ли отличия в компиляторах у сред разработки Visual Studio 2006 и Visual Studio 2015 ?
скажите а где найти среду 2006 года? или можно использовать 2015 год?

Visual Studio, C++, работа с присоединённой БД
во вкладке Server Explorer присоединил базу данных, подскажите пожалуйста, как с ней работать? Как к ней обратиться с запросом? ...

Работа с матрицей С++ Visual Studio
Люди, помогите сделать задание с матрицей. Вобщем: Дана матрица натуральных чисел (Xij) порядка m*n. Упорядочить столбцы матрицы за...

Visual studio c++ Работа с графикой
Доброго времени суток! Пожалуйста подскажите какой библиотекой пользоваться для создания и работы с графикой в visual studio 2012 С++??

Visual Studio Team Foundation Serverl или Visual Studio Professional
Visual Studio Team Foundation Server 2010 Кто пользовался Visual Studio Team Foundation Server 2010, и чем она отличаеться от Visual...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru