2012-02-06 60 views
4

IVsHierarchy接口为Visual Studio包的方法有Unused0Unused1Unused2Unused3Unused4在下面的描述:未使用的方法

Adds new methods without recompiling or breaking binary compatibility. 

有人能详细解释一下。这些方法如何帮助完全?

回答

6

Visual Studio扩展对象在COM中实现。 COM中的一个硬性规则是接口是不可变的。更改接口需要重新分配接口IID。识别界面的guid。这对任何使用界面的人都会造成很大的痛苦。他们将不得不改变他们的代码并重新编译它。

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

该地方持有人在那里允许微软添加新的方法到接口,但不是打破表布局。因此不必重新命名接口并重新分配接口IID。因此不会强制插件供应商重新编译插件。除非一个新的插件尝试使用旧的接口实现,否则这将不起作用。但与一个体面的异常消息,而不是一个讨厌的AccessViolation的赔率。

相关问题