使用C++ Builder将COM对象延迟绑定

Rod*_*ddy 5 c++ com c++builder late-binding

我们正在与C++ Builder 2010应用程序中的某些第三方COM对象进行交互.

目前,我们导入类型库并生成组件包装器,然后能够以相当自然的方式进行方法调用和访问属性.

object->myProperty = 42;
object->doSomething(666);
Run Code Online (Sandbox Code Playgroud)

但是,我们被COM对象的接口(仍在扩展和开发)的更改所困扰,导致我们自己的应用程序失败,因为某些方法GUID似乎无效 - 即使对接口的唯一更改是添加一种新方法).

后期绑定被认为是解决这个问题的一种方法.我认为这需要我们的代码更改,如下所示:

object.OlePropertySet("myProperty", 42);
object.OlePrcedure("doSomething", 666);
Run Code Online (Sandbox Code Playgroud)

显然这对于​​读写来说是痛苦的,所以我们必须编写包装类.

有没有办法在导入类型库时自动生成后期绑定包装器?并且,如果是这样,他们是否足够聪明,只能在创建对象时执行文本绑定,而不是每次调用方法?

Rem*_*eau 3

当您为支持后期绑定(当它实现接口时IDispatch)的 COM 对象导入 TypeLibrary 时,导入器可以为静态绑定和后期绑定生成单独的包装类(而不是组件)。

向现有接口添加新方法不应使您的代码无效。方法没有 GUID。但是,对于IDispatch基于 的接口,其方法确实具有DISPID与其关联的值,并且这些DISPID值可以从一个版本更改为另一个版本。然而,一旦接口定义被锁定,任何受人尊敬的 COM 开发人员都不应该这样做。