Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915

Вызов функции c++ из WinMain

28.12.2020, 22:00. Показов 1560. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,

Подскажите пожалуйста, в чем может быть дело:

У меня есть обычное окно и кнопка в ней. Отлавливаю нажатие кнопки и внутри вызываю просто обычную функцию, ну к примеру:
C++
1
2
3
4
void my_hello
{
cout<<hello<<endl;
}
Все работает, то есть я наживаю кнопку, и в консоли выводится "Hello".

Но, как только я добавляю в функцию всего пару строчек (получаю список файлов в указанной папке - использую <filesysytem> из c++17):
C++
1
2
3
4
5
6
    wstring path_name = L"D:\\Путь\\";
    vector<wstring>vector_string;
    fs::path my_path = path_name_wstring;
 
    for (auto const& p : fs::directory_iterator(path_name ))
    vector_string.push_back(p.path().wstring());
Вот тут получается какая то фигня: Если я путь в path_name - указываю корректный, то есть существующий, все опять работает нормально, НО, как только я указываю в path_name - не существующий путь, то просто приложение просто завершается ошибкой:


И просто не могу понять в чем дело. Такое ощущение, что есть какой-то нюанс в работе directory_iterator из filesysytem, но я не понимаю какой.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.12.2020, 22:00
Ответы с готовыми решениями:

Создание функции WinMain
Добрый день! Создала функцию int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE ,LPSTR , int ) { } тело функции пока пустое....

откуда программа берёт параметры функции WinMain?
Здрасьте. Ответьте мне пожалуйста на несложный вопросик. Никак не могу догнать откуда программа на паскале берёт параметры функции WinMain....

Массив указателей на функции, как аргумент функции. Вызов функции
Добрый день друзья. Есть вот такой код #include &lt;iostream&gt; using namespace std; double add(double, double); double...

8
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
28.12.2020, 22:30
Цитата Сообщение от Optimus11 Посмотреть сообщение
И просто не могу понять в чем дело. Такое ощущение, что есть какой-то нюанс в работе directory_iterator из filesysytem, но я не понимаю какой.
Цитата Сообщение от Optimus11 Посмотреть сообщение
fs:ath my_path = path_name_wstring;
Что такое path_name_wstring?

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
try
{
    wstring path_name = L"D:\\Путь\\";
    vector<wstring> vector_string;
 
    for (auto const& p : std::filesystem::directory_iterator(path_name ))
        vector_string.push_back(p.path().wstring());
}
catch(const std::exception &e)
{
    std::cout << "ERROR: " << e.what() << std::endl;
}
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
28.12.2020, 22:36  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Что такое path_name_wstring?
Это path_name, просто скопировал сюда коряво.

Добавлено через 4 минуты
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Что такое path_name_wstring?

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
try
{
    wstring path_name = L"D:\\Путь\\";
    vector<wstring> vector_string;
 
    for (auto const& p : std::filesystem::directory_iterator(path_name ))
        vector_string.push_back(p.path().wstring());
}
catch(const std::exception &e)
{
    std::cout << "ERROR: " << e.what() << std::endl;
}
Прошу прощения, совсем забыл про отлов exception.
В итоге получается, что так и есть - ошибка некорректного пути:
C++
1
ERROR: directory_iterator::directory_iterator: Синтаксическая ошибка в имени файла, имени папки или метке тома.
Но, дело в том, что, если я запускаю этот код функции просто в рамках main(), без Winmain, то ошибки не возникает при некорректно указанном пути.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
28.12.2020, 22:43
Цитата Сообщение от Optimus11 Посмотреть сообщение
Но, дело в том, что, если я запускаю этот код функции просто в рамках main(), без Winmain, то ошибки не возникает при некорректно указанном пути.
Возникает. Это необработанное исключение. Посмотри в консоли, какой код возвращает твоя программа.
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
28.12.2020, 23:17  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Возникает. Это необработанное исключение. Посмотри в консоли, какой код возвращает твоя программа.
В этом то и прикол, что 0 код, то есть без ошибок.
Исключение бросается, только когда путь указан некорректный и Только, когда я вызываю функцию из Winmain.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
28.12.2020, 23:39
Цитата Сообщение от Optimus11 Посмотреть сообщение
Исключение бросается, только когда путь указан некорректный и Только, когда я вызываю функцию из Winmain.
А что, когда путь корректный тоже это окошко вылазит?

Добавлено через 1 минуту
https://en.cppreference.com/w/... y_iterator
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
28.12.2020, 23:41  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
А что, когда путь корректный тоже это окошко вылазит?

Добавлено через 1 минуту
https://en.cppreference.com/w/... y_iterator
Когда путь корректный - все без ошибок работает.

C++
1
и Только, когда я вызываю функцию из Winmain.
Я имел ввиду, что ошибка и окно вылазит - только когда путь некорректный и когда из Winman - при эти двух условиях одновременно.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
29.12.2020, 11:12
Цитата Сообщение от Optimus11 Посмотреть сообщение
Я имел ввиду, что ошибка и окно вылазит - только когда путь некорректный и когда из Winman - при эти двух условиях одновременно.
Отлавливай исключение и всё

Добавлено через 34 минуты
И, directory_iterator можно вызвать так, чтобы он не кидал исключений. Посмотри по ссылке, которую я показал
1
-41 / 49 / 5
Регистрация: 10.01.2017
Сообщений: 1,915
29.12.2020, 11:32  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Отлавливай исключение и всё
Да, так и сделал. Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.12.2020, 11:32
Помогаю со студенческими работами здесь

Вызов функции внутри другой функции с передачей локальной переменной по ссылке
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include &lt;iostream&gt; using std::cout; void f(const int...

Процедуры и функции: Как сделать вызов функции для вводимого массива?
Как сделать вызов функции для вводимого массива? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; using...

Вызов функции из другой функции и обратно. Общие переменные функций
Всем привет. Заранее напишу, что я ещё только изучаю программирование В данной программе генирируются числа заполняющие одним...

Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель)
#include &lt;iostream&gt; using namespace std; template &lt;class T1&gt; class mas { public: T1 n; T1 a; void input() ...

Вызов функции из другой функции после нажатия на кнопку
Помогите, пожалуйста! Никак не могу понять почему не запускается функция d() Полный код: &lt;script language=&quot;javascript&quot;&gt;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru