Нарушение прав доступа по адресу в модуле «executetable.exe».Читать адрес - PullRequest
0 голосов
/ 11 июля 2011

Я прочитал некоторые проблемы с «Нарушением доступа» в сети, но это очень странно для меня

Я протестировал некоторые «решения», но безрезультатно

Это кусок кода:

TDateTime CFileVersionInfo::GetFileDate() const
{
    FILETIME local;
    SYSTEMTIME st;
    TDateTime res;

    FILETIME    ft;
    ft.dwLowDateTime = m_FileInfo.dwFileDateLS;
    ft.dwHighDateTime = m_FileInfo.dwFileDateMS;

    FileTimeToLocalFileTime(&ft, &local);
    FileTimeToSystemTime(&local, &st) ;
    //GetLocalTime(st);
    res = SystemTimeToDateTime(st) ;

    return res;
}

Я могу создать или построить программу без проблем, но когда я запускаю программу, она показывает ошибку Access Violation, если я комментирую функцию:

// TDateTime dateTime = fvi.GetFileDate();

Программа отлично работает

Я не профессионал в C ++. Я просто хочу создать программу для личного пользования, поэтому задаю этот вопрос эксперту

EDIT:

Я решил проблему

TDateTime CFileVersionInfo::GetFileDate() const
{
    _FILETIME local;
    _SYSTEMTIME st;
    TDateTime res;

    FILETIME    ft;
    ft.dwLowDateTime = m_FileInfo.dwFileDateLS;
    ft.dwHighDateTime = m_FileInfo.dwFileDateMS;

    FileTimeToLocalFileTime(&ft, &local);
    FileTimeToSystemTime(&local, &st) ;
    GetLocalTime(&st);           // <-- This is the solution.. for now...
    res = SystemTimeToDateTime(st) ;

    return res;
}

Ответы [ 2 ]

1 голос
/ 27 августа 2011

Я решил проблему

TDateTime CFileVersionInfo::GetFileDate() const
{
    _FILETIME local;
    _SYSTEMTIME st;
    TDateTime res;

    FILETIME    ft;
    ft.dwLowDateTime = m_FileInfo.dwFileDateLS;
    ft.dwHighDateTime = m_FileInfo.dwFileDateMS;

    FileTimeToLocalFileTime(&ft, &local);
    FileTimeToSystemTime(&local, &st) ;
    GetLocalTime(&st);           // <-- This is the solution.. for now...
    res = SystemTimeToDateTime(st) ;

    return res;
}
1 голос
/ 12 июля 2011

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

TDateTime CFileVersionInfo::GetFileDate() const
{
    FILETIME local;
    SYSTEMTIME st;

    FILETIME ft;
    ft.dwLowDateTime = m_FileInfo.dwFileDateLS;
    ft.dwHighDateTime = m_FileInfo.dwFileDateMS;

    if( FileTimeToLocalFileTime(&ft, &local) )
    {
        if( FileTimeToSystemTime(&local, &st) )
            return SystemTimeToDateTime(st);
    }

    return 0.0;
}
...