定义接口时,紧跟在关键字interface后面的叫做接口的逻辑名字,在没有引入GUID的时候,这个逻辑名字就是接口的唯一标识。正如第一章中展现的,运行时询问对象(Dynamic_cast)的时候使用的就是这个逻辑名字字符串。
当两个程序员各自独立开发一个接口,在给定的共同问题域中,两个接口定义不会完全相同,方法定义的实际顺序以及每个方法的原型都有可能存在差异,然而两个程序员给接口取了相同的逻辑名称。
使用过程中,针对第一个程序员开发的接口的客户程序,有可能与第二个程序员开发的对象一起运行,这时客户如果使用逻辑名称字符串询问对象是否支持这个接口,对象将会得到满足,返回一个非空的指针,而此时返回的是第二个程序员开发的接口,而并不是实际询问的第一个程序员开发的接口。
为了消除名字冲突,COM引入GUID来作为接口的实际名字,用来唯一标识接口。
COM中引用的GUID以DEC RPC中用到的UUID(Universally Unique Identifier)为基础。
当GUID用来命名COM接口时,被称为接口ID(interface ID ,IID)。
当GUID用来表示COM接口的实现时,被成为类ID(class ID,CLSID)。