Режим выпуска Visual Studio вызывает непредвиденную ошибку - PullRequest
0 голосов
/ 01 октября 2018

Я должен сделать простую программу с Visual Studio, используя Windows API.Мой код хорошо работает в режиме отладки, однако, он не работает хорошо в режиме выпуска, и я не мог понять, почему.Я вырезал и вставил часть, где моя программа потерпела крах.Вот эта часть.

#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include <windows.h> 

int _tmain(int argc, TCHAR * argv[])
{
    TCHAR cmdString[] = "notepad.exe";
    STARTUPINFO si = { 0, };
    PROCESS_INFORMATION pi;

    si.cb = sizeof(si);

    BOOL ret = TRUE;
    CreateProcess(NULL, cmdString, NULL, NULL, TRUE,
        CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);

    _tprintf(_T("Error = {%d}\n", GetLastError()));

    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    system("pause");

    return 0;

}

Простая программа, которая открывает notepad.exe, верно?Хорошо работает в режиме отладки, но блокнот не открывается в режиме выпуска (программа заканчивается без открытия notepad.exe).

Я пытался найти решение в SO, например, эта ссылка , но мне это мало помогает.

Почему CreateProcess () не работает должным образом в release-режим

1 Ответ

0 голосов
/ 01 октября 2018

Я предполагаю, что все дело в оптимизации компилятора, так как этот пост может рассказать вам намного лучше, чем я.

Поскольку CreateProcess возвращает (в случае успеха) ненулевое значение.

Попробуйте использовать это следующим образом:

BOOL ret = TRUE;
if(!CreateProcess(NULL, cmdString, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi))
      printf("Error = {%d}", GetLastError());
      ret = FALSE;

У вас даже будут некоторые подробности об ошибке.

...