GSerg писал(а):Каждый COM-объект имеет уникальный идентификатор, называемый GUID. При изменении интерфейса COM-объекта ему создаётся новый GUID. VB IDE занимается этим сама и тебя не спрашивает. Совместимость - это чтобы когда ты меняешь интерфейс в сторону добавления новых методов, все старые методы будут помещены в те же самые места vTable, что и раньше, в результате чего все проги, скомпилированные для работы со старой версией интерфейса, смогут работать и с новой. Если же ты меняешь описание интерфейса (описание методов, а не их код), то совместимость всегда нарушается.
Я добавлю, можно?
У библиотеки в целом есть LibID, и у каждого публичного компонента - свой ClsID и (один или больше) IID. В режиме No Compatibility все они генерируются случайно при каждой компиляции, в режиме Project Compatibility сохраняется LibID и заново генерируются ClsID-ы и IID-ы, в режиме Binary Compatibility - сохраняются LibID, ClsID-ы, старые IID-ы, и вдобавок создаются новые IID-ы, если это нужно.
И ещё, про "уникальный идентификатор, называемый GUID". GUID - это "физический" тип, как DWORD или SHORT, а CLSID/IID - "семантический", как HWND или BSTR. Т.е. утверждение в общем верно, но так же неинформативно, как "Каждое окно имеет уникальный идентификатор, называемый DWORD".