Проблема с COM функцией CoCreateInstance

Тема в разделе "WASM.BEGINNERS", создана пользователем _nic, 27 июн 2009.

  1. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Пытаюсь разобратся с IMAPI ,и сразу же столкнулся с непонятной ошибкой.
    Код (Text):
    1. int _tmain(int argc, _TCHAR* argv[])
    2. {
    3.     HRESULT hr=0;
    4.     IDiscMaster *pDiskMaster;
    5.     hr = CoCreateInstance(CLSID_MSDiscMasterObj, NULL,CLSCTX_LOCAL_SERVER, IID_IDiscMaster, (void**)&pDiskMaster);
    6.     if(hr!=S_OK){printf("%X",hr);getch();}
    7.     //pDiskMaster->Open();
    8.     return 0;
    9. }
    Функция CoCreateInstance возращяет какое то непонятное число неописаное в мсдн,а именно 800401F0 Подскажите какую оно означает ошибку.
     
  2. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    CoInitialize has not been called. Понятно, да?
     
  3. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Не совсем.Я ведь прописал Objbase.h , или ему ещё что то нужно???
     
  4. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    CoInitialize() вызвать!
     
  5. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Да сори затупил.Нада было всего лишь CoInitialize(NULL);
     
  6. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    А как где смотреть по этим числам значение ошибки? А то я напоролся на новую :dntknw: С0000005
     
  7. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    Утилита errlook из MS Visual Studio
     
  8. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    И <ntstatus.h>.
     
  9. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Немогу понять что за ошибка
    Код (Text):
    1. int _tmain(int argc, _TCHAR* argv[])
    2. {
    3.     ULONG fet;int i=0;
    4.     HRESULT hr=0;
    5.     IDiscMaster *pDiskMaster= NULL;
    6.     CoInitialize(NULL);
    7.     hr = CoCreateInstance(CLSID_MSDiscMasterObj,NULL,CLSCTX_LOCAL_SERVER,IID_IDiscMaster,(PVOID*)&pDiskMaster);
    8.     if(hr!=S_OK){printf("%X",hr);getch();}
    9.     pDiskMaster->Open();
    10.     IEnumDiscRecorders* recordersEnum;
    11.     IDiscRecorder* pRecorder;
    12.     hr = pDiskMaster->EnumDiscRecorders(&recordersEnum);
    13.     char dbcc_name[1024];char* buf;
    14.     memset(dbcc_name,NULL,1024);
    15.     ULONG ulReturnSizeRequired;
    16.     BSTR bstrVendorID=NULL, bstrProductID, bstrRevision;
    17.     for(;;)
    18.     {
    19.     recordersEnum->Next(1,&pRecorder,&fet);i++;
    20.     cout<<dbcc_name;
    21.         if(!pRecorder){break;}
    22.     pRecorder->GetRecorderGUID((byte*)dbcc_name,1024,&ulReturnSizeRequired);
    23.     hr=pRecorder->GetDisplayNames(&bstrVendorID,&bstrProductID,&bstrRevision);
    24.     //cout<<_com_util::ConvertBSTRToString(bstrVendorID)<<endl;
    25.     if(hr!=S_OK){printf("%X",hr);getch();}
    26.     buf=_com_util::ConvertBSTRToString(bstrVendorID);
    27.     cout<<buf;
    28.     }
    29.     //cout<<i<<dbcc_name;
    30.     getch();
    31.     return 0;
    32. }
    Вылет когда обращяюсь к bstrVendorID.Скорей всего там пусто.А значение которое возвращяет pRecorder->GetDisplayNames (С0000005) errlook ненаходит :dntknw: В чем может быть дело???
     
  10. Ursus

    Ursus Member

    Публикаций:
    0
    Регистрация:
    15 мар 2006
    Сообщения:
    238
    Адрес:
    Russia
    С0000005 - это access violation. Ищи обращение по невалидному указателю.
     
  11. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Почему же тогда вылет программы непроисходит на строчке hr=pRecorder->GetDisplayNames(&bstrVendorID,&bstrProductID,&bstrRevision); ?
     
  12. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    ЗЫ:проблему решил так
    Код (Text):
    1. BSTR bstrVendorID=NULL, bstrProductID=NULL, bstrRevision=NULL;