Я учусь писать элемент ActiveX с возможностью сценариев. Моя цель - иметь крошечный элемент управления, который может проверить, установлено ли что-либо в системе. То, что я сделал до сих пор:
- Создание проекта управления MFC ActiveX в VS2008
- Добавьте некоторые «безопасные для сценариев» биты, которые я нашел здесь .
- Расширьте IDL, чтобы предоставить мой метод "IsInstalled", который на данный момент возвращает TRUE безоговорочно (но позже будет считывать некоторые ключи из реестра.)
- Постройте элемент управления и запустите на нем regsvr32. Я убедился, что он отображается в HKEY_CLASSES_ROOT, и когда я создаю экземпляр объекта, на панели «Локальные ресурсы» инструментов разработчика IE показано, что объект имеет тип _D [имя моего плагина]. Не только это, но мой метод IsInstalled () обнаруживается под этим объектом.
Однако, когда я вызываю IsInstalled (), я просто не могу заставить его работать:
JScript Debugger - Ошибка при взломе во время выполнения JScript - (n http://img138.imageshack.us/img138/1586/whycomwhy.png
Я в растерянности. Я также пытался сделать IsInstalled свойством вместо метода, используя VARIANT_BOOL вместо логического вместо 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();
};
Если есть какие-либо другие важные части кода, которые я должен предоставить, дайте мне знать. Но я в тупике. Заранее спасибо!