Программа не запускается - она открывается и закрывается

0

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

Я даже попробовал пример кода:

int APIENTRY WinMain (HINSTANCE ...)
    ShellExecute(NULL, (LPCWSTR)"open", (LPCWSTR)"cmd.exe", NULL, NULL, SW_SHOW);

и он все еще только открывается и закрывается. В чем проблема? Я могу предоставить выходной журнал, если это необходимо, но я понятия не имею.

  • 0
    Программы запускаются, и когда они выполнили все свои инструкции, они закрываются. Можете ли вы показать программу целиком и указать, почему вы считаете, что она должна оставаться открытой дольше, чем она?
  • 4
    Что касается кода в вопросе, это совершенно неправильно. Приведение const char* к const wchar_t* не делает это так. Каждый раз, когда вы используете актерский состав, вы должны быть обеспокоены. Вам нужно использовать широкие литералы: L"open" . Вы также утверждаете, что ошибок нет. Но я не вижу никаких доказательств того, что вы проверяли ошибки.
Показать ещё 1 комментарий
Теги:
visual-studio
winapi

1 ответ

5
Лучший ответ

Я не уверен, что понимаю, что вы имеете в виду при открытии и закрытии. Но этот код очень неправильный:

ShellExecute(NULL, (LPCWSTR)"open", (LPCWSTR)"cmd.exe", 
    NULL, NULL, SW_SHOW);

Отливки не хороши. Два строковых литерала являются указателями на массивы char отбрасывающие их в const wchar_t*, не изменяя их. Он просто просит компилятор доверять тому, что вы знаете лучше, чем он. Вы этого не сделаете. Они действительно не const wchar_t*. Все ваши достижения позволяют вам разбить безопасность типов и преобразовать информативную ошибку времени компиляции в критический период времени выполнения. До тех пор, пока у вас не будет глубокого понимания языка, вы должны воздержаться от кастинга.

Вам нужно использовать широкие литералы:

ShellExecute(NULL, L"open", L"cmd.exe", NULL, NULL, SW_SHOW);

Вы также не проверяете ошибки. Это довольно сложно с ShellExecute. Вместо этого попробуйте ShellExecuteEx и обратите внимание на возвращаемое им значение.

  • 0
    ShellExecuteEx показал мне, в чем именно заключалась моя ошибка при отладке с помощью OllyDbg -> Это помогло мне понять ... спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню