Visual Studio扩展接口中未使用的方法

Tat*_*ela 4 .net com visual-studio visual-studio-extensions

IVsHierarchy接口为Visual Studio包的方法有Unused0,Unused1,Unused2,Unused3Unused4在下面的描述:

Adds new methods without recompiling or breaking binary compatibility.
Run Code Online (Sandbox Code Playgroud)

有人可以更详细地解释这一点.这些方法如何帮助完全?

Han*_*ant 6

Visual Studio扩展对象在COM中实现.COM中的一个硬性规则是接口是不可变的.更改接口需要重新分配接口IID.标识接口的guid.这会给使用界面的任何人带来很多痛苦.他们必须改变他们的代码并重新编译它.

存在这种不变性要求,因为在引擎盖下COM接口被实现为方法地址表.当客户端代码假定表格看起来与服务器实现的实际表格不匹配时,灾难就会发生.或者换句话说,当接口不是二进制兼容的时候.这会产生非常难以诊断的运行时错误,当客户端代码最终调用错误的方法或使用根本没有关联方法的表槽时触发.这是臭名昭着的COM DLL Hell问题.更改IID解决了它,客户端代码将无法再找到旧的实现.仍然是一个令人讨厌的错误,但至少容易诊断.

占位符允许Microsoft向界面添加新方法但破坏表格布局.因此不必重命名接口并重新分配接口IID.因此不会强迫插件供应商重新编译他们的插件.除非新的插件尝试使用旧的接口实现,否则仍然无法正常工作.但有一个体面的异常消息的可能性,而不是令人讨厌的AccessViolation.