Невозможно определить, почему параметр метода поврежден в режиме выпуска, но работает в режиме отладки - PullRequest
0 голосов
/ 25 мая 2020

Вот метод:

// Override to be notified about every file processed
bool MultiActionsNext(LPCTSTR lpszFileInZip = NULL)
{
    if (CZipActionCallback::MultiActionsNext())
    {
        CMultiActionsInfo* pMulti = GetMultiActionsInfo();
        CString strProgress, strPercentComplete;

        strPercentComplete.Format(_T("%d%%"),
            theApp.CalculatePercent(pMulti->m_uFilesProcessed, pMulti->m_uTotalFilesToProcess));

        if (lpszFileInZip != NULL)
        {
            strProgress = lpszFileInZip;
        }
        else
        {
            strProgress.Format(_T("Files Processed: %u of %u"),
                pMulti->m_uFilesProcessed, pMulti->m_uTotalFilesToProcess);
        }

        if (m_pWndProgressText != nullptr)
        {
            m_pWndProgressText->SetWindowText(strProgress);
            m_pWndProgressText->UpdateWindow();
        }
        if (m_pWndProgressPercentText != nullptr)
        {
            m_pWndProgressPercentText->SetWindowText(strPercentComplete);
            m_pWndProgressPercentText->UpdateWindow();
        }
        if (m_pProgressCtrl != nullptr)
            m_pProgressCtrl->SetPos(pMulti->m_uFilesProcessed);
        return true;
    }
    else
        // Processing was requested to be stopped.
        // It won't happen in this sample code, because
        // the Callback method always returns true.
        return false;
}

Моя проблема связана с этой строкой кода:

m_pWndProgressText->SetWindowText(strProgress);

Если я нахожусь в режиме DEBUG , результат будет отлично:

Debug build

Но когда я нахожусь в режиме RELEASE , результат - мусор:

Release build

Если я поставлю точку останова в этой функции для lpszFileInZip:

  • Отладка:

Debug Break Point

  • Выпуск:

Release Break Point

Я не могу понять, почему один в порядке а один - нет.


В 32-битном режиме Release я теперь замечаю, что получаю исключение, указывающее, что переданный параметр недействителен:

Release Break Point 32 Bit

...