Не отлавливается исключение в try .. catch(...)
От: М.Р. https://www.wincatalog.com
Дата: 22.11.11 05:54
Оценка:
Всем привет!

Имеется следующий код. Изначально это был MFC проект, использующий класс COleDateTime, но к делу это отношения не имеет, поведение от этого не меняется.

Итак, имеется дата. Задача — получить строковое представление этой даты согласно строке формата. Для преобразования используется функция _wcsftime_l() потому, что именно эту функцию использует MFC-шный класс COleDateTime.

Строка формата содержит ошибку — в конце имеется лишний знак процента.

В Visual Studio 6.0 результатом является неправильная строка с результатом, содержащая мусор. Никаких исключений не генерируется. (ОК, так и было в унаследованном проекте).

В Visual Studio 2008 Professional, в процессе разботы фунцкии _wcsftime_l(), возникает исключение, которое я отловить не могу, не смотря на наличие блоков try-catch. Программа просто аварийно завершается.

В Visual Studio 2010 Professional то же самое. В настройках проекта исключения включены. Пробовал и с SEH (/EHa) и без (/EHsc). В чем может быть дело?

Для теста было создано консольное приложение с поддержкой Unicode. VS2008, VS2010, VS6.0 (с заменой вызова _wcsftime_l() на wcsftime()).

Код полностью:
#include "stdafx.h"
#include <iostream>
#include <time.h>


int _tmain(int argc, _TCHAR* argv[])
{
    const wchar_t format[] = L"%d-%m-Y%";    //Ошибочно стоит знак % 
                                            //в конце строки формата
    wchar_t result[255] = L"";

    time_t rawtime;
    time ( &rawtime );
    
    tm* now = localtime ( &rawtime );

    try
    {
        _wcsftime_l(result, 255, format, now, NULL);
    }
    catch (...)
    {
        wcscpy(result, L"Error in format string");
    }

    std::wcout << result << std::endl;
    system("pause");

    return 0;
}

Спасибо!
WinCatalog — Disk Catalog Software for Windows
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.