MFC ActiveX 控件:创建自动化服务器以及出现灾难性故障原因
MFC ActiveX 控件:创建自动化服务器
可以开发 MFC ActiveX 控件作为自动化服务器,用来以编程方式将控件嵌入其他应用程序,并从应用程序调用控件中的方法。这样的控件仍可以在 ActiveX 控件容器中被承载。 创建控件作为自动化服务器 以编程方式访问自动化服务器中的方法
如果在应用程序中使用 ActiveX 控件后将方法添加到 ActiveX 控件中,则可以通过删除在导入类型库时创建的文件,开始在应用程序中使用控件的最新版本。然后再次导入类型库。 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 章解释了您需要 OLE 控件作为普通的自动化服务器以便进行必要的修改。 之前到 Visual c + + 4.0,OLE 控件可以用作自动化服务器而无需进行任何修改。然而,在 MFC 4.0,框架的实现的 IDispatch::Invoke 调用虚函数确定自动化服务器是否处于适当的状态来处理自动化 IsInvokeAllowed 调用。默认实现中 CCmdTarget::IsInvokeAllowed,返回真,暗服务器可以处理自动化呼叫。 在一个 OLE 控件的情况下 COleControl::IsInvokeAllowed 检查是否控件已被初始化或通过持久存储接口正确加载。如果该 控件中有适当的状态信息,则此函数返回 TRUE。创建 OLE 控件时为普通的自动化服务器,它不会创建为一个嵌入在客户 端中。因此的持久状态初始化任何会因此导致 IsInvokeAllowed 返回 FALSE 的地方。此操作的效果是自动化对象方法的调 用生成的 (8000ffff) 运行时错误:"灾难性失败"。 若要使用 OLE 控件只能作为自动化服务器,必须重写 COleControl::IsInvokeAllowed() 并返回 TRUE。如果任何控件的属 性和方法不应访问作为一个普通的自动化服务器调用时,然后该自动化函数可能会跳过并/或 COleControl::m_bInitialized 为 FALSE 时返回的错误代码。
转自:http://hi.baidu.com/quankang/blog/item/434b6feee4109ff7b3fb9503.html
|