Я изучаю, как писать скриптовый элемент управления ActiveX. Моя цель - иметь крошечный элемент управления, который может проверить, установлено ли что-то в системе. Что я сделал до сих пор:Написание простого элемента управления ActiveX для IE с одним методом
- Создать проект управления MFC ActiveX в VS2008
- Добавить некоторые «безопасные для сценариев» биты, которые я нашел here.
- Расширьте IDL, чтобы предоставить мой метод «IsInstalled», который теперь безоговорочно возвращает TRUE (но позже будет читать некоторые ключи из реестра.)
- Создайте элемент управления и запустите regsvr32 на нем. Я подтвердил, что он отображается в HKEY_CLASSES_ROOT, и когда я создаю экземпляр объекта, панель «Локали» в IE Developer Tools показывает, что объект имеет тип _D [мое имя плагина]. Не только это, но мой метод IsInstalled() появляется под этим объектом.
Однако, когда я называю IsInstalled(), я просто не могу заставить его работать:
Я в недоумении. Я также попытался сделать IsInstalled свойство вместо метода, используя VARIANT_BOOL вместо boolean вместо BOOL в IDL, вы назовете его.
Вот соответствующие выдержки из кода.
Заголовок:
afx_msg VARIANT_BOOL IsInstalled();
Реализация:
afx_msg VARIANT_BOOL
CMyAXCtrl::IsInstalled()
{
return TRUE;
}
Отправка карта:
BEGIN_DISPATCH_MAP(CMyAXCtrl, COleControl)
DISP_FUNCTION_ID(CMyAXCtrl, "IsInstalled", dispidIsInstalled, IsInstalled, VT_BOOL, VTS_NONE)
END_DISPATCH_MAP()
Отправка часть IDL:
[ uuid(6B662202-CF13-4144-AA33-C3FEE9C2C962),
helpstring("Dispatch interface for My Control")]
dispinterface _Daxplugin
{
properties:
methods:
[id(1)] VARIANT_BOOL IsInstalled();
};
Если есть какие-либо другие соответствующие биты кода, которые я должен предоставить, сообщите мне. Но я здесь. Заранее спасибо!
Какая ошибка выполнения JScript, которую вы получаете? Ваша картинка просто показывает «(n», что не очень полезно. –
Это именно то, что есть. Я не могу понять, как показать полную ошибку времени выполнения. В любом случае, см. Мой комментарий ниже - это своего рода спорный вопрос теперь –