Почему CoUninitialize вызывает ошибку при выходе?

Я работаю над приложением C ++ для чтения некоторых данных из файла Excel. У меня это работает, но я запутался в одной части. Вот код (упрощенный, чтобы читать только первую ячейку).

//Mostly copied from http://www.codeproject.com/KB/wtl/WTLExcel.aspx

#import "c:\Program Files\Common Files\Microsoft Shared\OFFICE11\MSO.DLL"
#import "c:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
#import "C:\Program Files\Microsoft Office\Office11\excel.exe" rename ("DialogBox","ExcelDialogBox") rename("RGB","ExcelRGB") rename("CopyFile", "ExcelCopyFile") rename("ReplaceText", "ExcelReplaceText") exclude("IFont", "IPicture")

_variant_t varOption((long) DISP_E_PARAMNOTFOUND, VT_ERROR);

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD dwCoInit = 0;
    CoInitializeEx(NULL, dwCoInit);
    Excel::_ApplicationPtr pExcel;    
    pExcel.CreateInstance(_T("Excel.Application"));
    Excel::_WorkbookPtr pBook;
    pBook = pExcel->Workbooks->Open("c:\\test.xls", varOption, varOption, varOption, varOption, varOption, varOption, varOption, varOption, varOption, varOption, varOption, varOption);
    Excel::_WorksheetPtr pSheet = pBook->Sheets->Item[1];
    Excel::RangePtr pRange = pSheet->GetRange(_bstr_t(_T("A1")));
    _variant_t vItem = pRange->Value2;
    printf(_bstr_t(vItem.bstrVal));    
    pBook->Close(VARIANT_FALSE);
    pExcel->Quit();
    //CoUninitialize();
    return 0;
}

Я должен был закомментировать призыв CoUninitialize для работы программы. Когда CoUninitialize не комментируется, я получаю нарушение прав доступа в функции _Release в comip.h при выходе из программы.

Вот код из comip.h, для чего это стоит.

void _Release() throw()
{
    if (m_pInterface != NULL) {
        m_pInterface->Release();
    }
}

Я не очень разбираюсь в программировании COM, так что, возможно, что-то очевидное мне не хватает.

Почему вызов CoUninitialize вызывает исключение?

Каковы последствия отказа от вызова CoUninitialize?

Я что-то здесь делаю не так?

Ответы на вопрос(3)

Ваш ответ на вопрос