navneet@ISM Ответов: 2

Не удалось создать элемент управления object-activex в VC++ 6.0


Ниже метод выполняется два раза, первый раз возвращая -2,147,467,262 для значения HRESULT и второй раз ноль, для создания одного объекта, и в конечном итоге не удается создать объект управления ActiveX.

Value of HRESULT shows hresult = 

STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
      HRESULT hres = _Module.GetClassObject(rclsid, riid, ppv);
      return hres;
}


Что я уже пробовал:

отрицательное значение HRESULT переводится в код ошибки 0x80004002 / E_NOINTERFACE с описанием "такой интерфейс не поддерживается".

Jochen Arndt

Каковы значения rclsid и riid при вызове этой функции?

Они говорят вам, какие com-интерфейсы (riid) не присутствуют в классах (rclsid).

Затем проверьте, присутствует ли и зарегистрирована ли библиотека DLL, содержащая объекты.

navneet@ISM

Функция DllGetClassObject выполняется два раза, rclsid остается неизменным в обоих исполнениях. Дополнительно:
При первом выполнении riid = IID_IClassFactory2, ppv = 0x005be5bc, hresult = -2147467262 ;
Во втором исполнении: riid = IID_IClassFactory, ppv = 0x005bf2ec, hresult = 0

Jochen Arndt

Таким образом, DLL, содержащая объекты, не поддерживает IID_IClassFactory2.
Вам действительно нужен этот интерфейс (он требуется только тогда, когда объект защищен лицензией).

Вы должны спросить поставщика библиотеки DLL или проверить документацию.

navneet@ISM

Попытался добавить этот элемент управления ActiveX в диалоговое окно другого базового приложения mfc, щелкнув правой кнопкой мыши и нажав "вставить элемент управления ActiveX". Это дает две ошибки на рыси как:

1.элемент управления ActiveX не может быть создан.
2." Times Control " не является допустимым элементом управления ActiveX. В нем отсутствует необходимый интерфейс.

Что меня смущает, так это то, что я смотрю на все зарегистрированные объекты автоматизации, проект которых компилировался в a .dll-файл присутствует в виде файла. OCX

2 Ответов

Рейтинг:
1

KarstenK

Таким образом, очевидно, что создание объекта пошло не так. Это происходит, когда GUID неверен или объект не зарегистрирован. Иногда это происходит, когда отсутствует какая-то (поддерживающая) dll-библиотека, необходимая для создания объекта.

Убедитесь, что параметры вызова адресуют правильный объект. Мой совет заключается в том, что он не зарегистрирован. Зарегистрируйтесь в командной строке с помощью regsvr32 в режиме администратора!!!


navneet@ISM

Я попытался зарегистрировать dll и ocx в командной строке с помощью regsvr32 в режиме администратора. но все равно дает мне ту же ошибку. Я посмотрю на GUID, как было предложено. Dll не выглядит отсутствующей в проекте. Спасибо Вам за эти подсказки, цените это.

navneet@ISM

Попытался добавить этот элемент управления ActiveX в диалоговое окно другого базового приложения mfc, щелкнув правой кнопкой мыши и нажав "вставить элемент управления ActiveX". Это дает две ошибки на рыси как:

1.элемент управления ActiveX не может быть создан.
2." Times Control " не является допустимым элементом управления ActiveX. В нем отсутствует необходимый интерфейс.

Рейтинг:
0

navneet@ISM

Элемент управления ActiveX, имеющий постоянное состояние, как это было в случае с этим элементом управления, должен реализовывать либо IPersistStream, либо IPersistStreamInit. Добавление строки "COM_INTERFACE_ENTRY(IPersistStreamInit)" в разделе

"BEGIN_COM_MAP(MyControl) - - - - - - - END_COM_MAP()"

решить вопрос.