我正在学习如何编写可脚本化的ActiveX控件。我的目标是创建一个小型控件,可以检查系统上是否安装了某些东西。我已经完成的工作包括:
调度地图:
- 在VS2008中创建了一个MFC ActiveX控件项目
- 添加了一些“对于脚本来说是安全的”位,这些位可以在这里找到。
- 扩展了IDL以提供我的“IsInstalled”方法,该方法现在无条件返回TRUE(但以后将从注册表中读取一些键)。
- 构建控件并在其上运行regsvr32。我验证了它确实显示在HKEY_CLASSES_ROOT中,并且当我实例化对象时,IE开发人员工具的“Locals”窗格显示该对象是类型为_D [我的插件名称]。不仅如此,我的IsInstalled()方法也显示在该对象下面。
然而,当我调用IsInstalled()时,它就无法正常工作:
我很困惑。我还尝试过将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();
};
如果您需要其他相关的代码,请告诉我。但是我在这里被难住了。提前谢谢!