我们正在从C++Builder 2010应用程序与一些第三方COM对象进行接口交互。
目前,我们导入类型库并生成组件包装器,然后可以相对自然地进行方法调用和访问属性。
然而,由于COM对象接口的更改(仍在扩展和开发中),导致我们自己的应用程序失败,因为一些方法GUID似乎会失效 - 即使接口的唯一更改是添加了一个新方法。建议使用Late Binding来解决这个问题。我认为这需要更改我们的代码,就像这样:链接。
目前,我们导入类型库并生成组件包装器,然后可以相对自然地进行方法调用和访问属性。
object->myProperty = 42;
object->doSomething(666);
然而,由于COM对象接口的更改(仍在扩展和开发中),导致我们自己的应用程序失败,因为一些方法GUID似乎会失效 - 即使接口的唯一更改是添加了一个新方法。建议使用Late Binding来解决这个问题。我认为这需要更改我们的代码,就像这样:链接。
object.OlePropertySet("myProperty", 42);
object.OlePrcedure("doSomething", 666);
很显然这种写法读起来和写起来都很痛苦,所以我们需要写包装类。
是否有办法在导入类型库时自动生成延迟绑定的包装类?如果可以,它们是否足够聪明,只在对象创建时进行文本绑定一次,而不是在每个方法调用时都进行?
<libfile>_OCX.hpp
头文件中的T<classname>对象。 - RoddyVariant
和OleVariant
类支持类似于Delphi编译器本地支持的后期绑定操作,就像Roddy所展示的那样,即在Delphi中object.myProperty := 42;
变成了在C++中的object.OlePropertySet("myProperty", 42);
,在Delphi中的object.doSomething(666);
变成了在C++中的object.OleProcedure("doSomething", 666);
等。 - Remy LebeauIxxxDisp
包装器,提供 DISPID-based 绑定。 - Roddy