首页 > 解决方案 > 如何检查 OCX 接口中的方法是否可用

问题描述

目前,我在我们的产品中嵌入了一个 OCX,使用标准样板 Delphi 导入 OCX。供应商发布了新版本的 OCX,它对所有内容(对象和接口)使用完全相同的 GUID,但 API 有所更改。这些更改非常有限,但我很难找到一种可靠的方法来确定已安装的 OCX 是使用旧版本还是新版本。显而易见的方法是深入到接口中,并检查对象实例化后是否可以使用特定方法。我想通过实际询问对象特定方法的调度 ID 来查看它是否存在来做到这一点。

我不想使用调用新方法并获取异常的方法,因为对象在初始化之前将无法工作,并且初始化 API 是发生变化的事情之一。这意味着在初始化之前对新方法的任何调用都将失败。

有谁知道戳穿 Delphi 包装器并找出是否可以解决特定方法的正确方法是什么?

标签: delphi

解决方案


答案实际上在您的问题中:

我想通过实际询问对象特定方法的调度 ID来查看它是否存在来做到这一点。

OCX 对象实现了IDispatch接口,并IDispatch有一个GetIDsOfNames()方法用于返回对象的方法和属性的调度 ID(用于与 一起使用IDispatch.Invoke())。如果对象不知道请求的名称,则GetIDsOfNames()返回DISP_E_UNKNOWNNAME


推荐阅读