Com 将接口从IUnknown更改为IDispatch

Com 将接口从IUnknown更改为IDispatch,com,vtable,idispatch,iunknown,Com,Vtable,Idispatch,Iunknown,我有一个COM类,只能通过vtable访问。它已经分发给客户端。我还计划通过引入IDispatch来允许脚本访问 在我的本地测试中,它显示客户端代码不会更改,但它们需要重新生成代码,为什么会这样?这不是一个突破性的更改。很难猜测,可能客户端工具认为这是必要的,因为类型库已更改。您是否将主界面更改为现在从IDispatch继承,而不是从IUnknown继承?您不能再更改已发布接口上的继承列表,您可以更改方法列表或它们的参数。这样做会导致vtable插槽向下移动,为IDispatch方法腾出空间。是

我有一个COM类,只能通过vtable访问。它已经分发给客户端。我还计划通过引入IDispatch来允许脚本访问


在我的本地测试中,它显示客户端代码不会更改,但它们需要重新生成代码,为什么会这样?

这不是一个突破性的更改。很难猜测,可能客户端工具认为这是必要的,因为类型库已更改。您是否将主界面更改为现在从IDispatch继承,而不是从IUnknown继承?您不能再更改已发布接口上的继承列表,您可以更改方法列表或它们的参数。这样做会导致vtable插槽向下移动,为IDispatch方法腾出空间。是的,没错。我从IUnknown将继承更改为IDispatch。我想你是对的。你不必让vtable,
IUnknown
接口继承自
IDispatch
,只有对象本身必须实现
IDispatch
,这不是一个突破性的更改。@PauloMadeira是的,这不是一个突破性的更改代码方面,但二进制兼容性被破坏了。正如EuroNeucoli所解释的,由于较旧的客户端二进制文件不准备接受vtable中感兴趣的方法之后和之前的附加
IDispatch
方法条目。