Не работает CoCreateInstancе в windows7??

Тема в разделе "LANGS.C", создана пользователем zaqer, 25 фев 2010.

  1. zaqer

    zaqer New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2008
    Сообщения:
    22
    Что-то не заладилось в win7 х64, в ХР х32 все работало на ура, в чем причина?
    Пример:

    Код (Text):
    1. //Глобальная переменная
    2. IID IID_IAcadApplication = {0x2959C1CC,0x8577,0x4EDB,{0xAD,0xDC,0x6E,0xBB,0xAB,0x14,0x79,0x26}};
    3.  
    4. void DoAutoCAD(void)
    5. {
    6.   HRESULT  hr;
    7.   CLSID      Autoclsid;
    8.   PVOID     pAutoCAD;
    9.  
    10.   CoInitialize(NULL);
    11.   hr = CLSIDFromProgID(L"AutoCAD.Application",&Autoclsid);// Работает, возвращает CLSID который в реестре прописан.
    12.   if(SUCCEEDED(hr))
    13.     {
    14.        hr = CoCreateInstance(Autoclsid,NULL,CLSCTX_INPROC_SERVER,IID_IAcadApplication,
    15.                                             (void**)&pAutoCAD);
    16.        if(SUCCEEDED(hr))
    17.           {
    18.         //Возвращает "Класс не зарегистрирован"
    19.                 //AutoCAD ставил тот-же что и на Хрюшке стоял
    20.                 //............(((((
    21.       }
    22.       }  
    23.   CoUninitialize();
    24.   return;
    25. }
    Пробовал вместо IID_IAcadApplication передавать IID_IDispatch, IID_IUnknown все одно "Класс не зарегистрирован";
     
  2. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Наверно ком-сервер 32-битный, а вызываешь ты его из 64-битного процесса, не?
     
  3. zaqer

    zaqer New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2008
    Сообщения:
    22
    AutoCAD установил 64-битный, версии 2010. Вызов CreateInstance естественно идет из 64-битного процесса.
    Просто не верится что такая солидная прога не поддерживает COM-интерфейсы(свои же). Тогда бы в мануале была бы сноска на это.
     
  4. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    А что в реестре по clsid записано? может они решили его сделать в 64-битной версии outproc сервером.
     
  5. zaqer

    zaqer New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2008
    Сообщения:
    22
    В реестре CLSID такой-же как и в библиотеке типов у CLSID_IAcadApplication. На мой взгляд все должно работать(и работало), но как показала практика... что-то не то я вижу))).
     
  6. zaqer

    zaqer New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2008
    Сообщения:
    22
    Всем спасибо, все очень просто нужно использовать CLSCTX_LOCAL_SERVER вместо CLSCTX_INPROC_SERVER.