7.7 Внешняя компонента 1C, интерфейс IInitDone

Тема в разделе "Общие вопросы "1С:Предприятие 7.7"", создана пользователем Вадим, 22 дек 2008.

  1. TopicStarter Overlay
    Вадим
    Offline

    Вадим

    Регистрация:
    22 дек 2008
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    Добрый день.

    Прошу прощения, что немного не по адресу, но за неделю перелопатил практически весь интернет, а ответа так и не нашёл. Если моя тема находится не в той ветке, то просьба к модераторам перенести её в правильное место.

    Microsoft Visual C++ 2005. Пробую сделать внешнюю компоненту к 1С. Согласно официальной инструкции, наследуюсь от IInitDone и перегружаю все его методы и мелоды IUnknown. DLL благополучно регистрируется, и я в состоянии при помощи клиента собственного изготовления создать объект ко-класса:
    Код:
    HRESULT hr = ::CoGetClassObject(CLSID_Protection,
    CLSCTX_INPROC_SERVER,
    NULL,
    IID_IInitDone,
    (void **)&pIInitDone);
    
    Методы AddRef() и Release() вызываются, объект благополучно создаётся. Я даже в состоянии вызвать метод Init() передав ему NULL в качестве параметра.

    Но при попытке создать объект в 1С (любой версии - v77, v81) возникает падение системы после вызова метода Init(): Access violation reading location 0x00000000. Опытным путём было обнаружено, что в качестве параметра Init(IDispatch *pConnection) получает нулевой указатель на интерфейс 1С-Предприятия. Причём я не использую этот параметр, но, возможно, его использует 1С после вызова Init-а. Сам Init() совершенно безобиден:
    Код:
    HRESULT __stdcall CProtection::Init(IDispatch *pConnection)
    {
    return S_OK;
    }
    
    Если вернуть E_FAIL, 1С не вылетит, но и объект не создаст. С чем может быть связано такое поведение? В каких ветках реестра компонента должна обязательно зарегистрироваться, чтобы 1С считал её полноценно своей? Замечу, что ATL я не использую, хочу все необходимые действия проделать самостоятельно.

    Что ещё есть в интернете по внешним компонентам, кроме того, что я уже прочёл (материалы с ИТС можно не предлагать - я их тщательно изучил)? Большое спасибо за любые подсказки!

Поделиться этой страницей