Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > GetDiskFreeSpaceExA, разные значения


Автор: lv151 30.7.2009, 11:48
GetDiskFreeSpaceExA под дэбагом и релизом выдаёт разные значения.


Код

typedef BOOL (WINAPI *GetDiskFreeSpaceEx_t)(LPCTSTR,PULARGE_INTEGER, PULARGE_INTEGER,PULARGE_INTEGER);
    GetDiskFreeSpaceEx_t pGetDiskFreeSpaceEx = (GetDiskFreeSpaceEx_t)::GetProcAddress (::GetModuleHandle("kernel32.dll" ),"GetDiskFreeSpaceExA" );
    
    if ( pGetDiskFreeSpaceEx ) 
    {
        ULARGE_INTEGER _total, _free;
        SetErrorMode( SEM_FAILCRITICALERRORS );
        
        if (!pGetDiskFreeSpaceEx(_T(path), &_free, &_total, NULL)) 
        {
            SetErrorMode( 0 );
            if ( free.QuadPart )  free.QuadPart  = 0;
            if ( total.QuadPart ) total.QuadPart = 0;
            return false;
        }
        
        SetErrorMode(0);

        if ( total.QuadPart ) 
        {
            total.QuadPart = _total.QuadPart;
        }
        
        if ( free.QuadPart ) 
        {
            free.QuadPart = _free.QuadPart;
        }
    } 


Под релизом free.QuadPart = 0.

VS5.

Автор: andrew_121 30.7.2009, 12:10
Этого не может быть. Так как функцию GetDiskFreeSpaceExA ты получаешь динамически. Она никакого отношения к сборке проекта не имеет.
Странно.

Автор: lv151 30.7.2009, 12:13
Прикол, то же самое было в дэбаге, в релизе всё ОК.
Поставил брэкпоинт в данном куске кода и всё стало ОК, но в релизе результат 0.

Автор: GremlinProg 30.7.2009, 14:00
Код

        if ( _total.QuadPart ) 
        {
            total.QuadPart = _total.QuadPart;
        }
        
        if ( _free.QuadPart ) 
        {
            free.QuadPart = _free.QuadPart;
        }

Автор: andrew_121 30.7.2009, 16:10
Покажи функцию целиком.

Автор: lv151 4.8.2009, 09:51
Цитата(GremlinProg @  30.7.2009,  14:00 Найти цитируемый пост)
if ( _total.QuadPart ) 
        {
            total.QuadPart = _total.QuadPart;
        }
        
        if ( _free.QuadPart ) 
        {
            free.QuadPart = _free.QuadPart;
        }


Точно, в этом было дело.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)