What are types of compatibility in VB6
There are three possible project compatibility settings:
1) No Compatibility: With this Compatibility setting, new interface ID's, new class ID's, and a new type library ID will be generated by VB every time the ActiveX component project is compiled. This will cause any of the compiled client components to fail (with error 429!) and report a missing reference to the 'VB ActiveX Test Component whenever a client project is loaded in the VB IDE.
2) Project Compatibility: With this Compatibility setting, VB will generate a new interface ID's for classes whose interfaces have changed, but will not change the class ID's or the type library ID. This will still cause any of the compiled client components to fail (with error 429!) but will not report a missing reference to the 'VB ActiveX Test Component' whenever a client project is loaded in the VB IDE. Recompilation of the client components will restore them to the working order again.
3) Binary Compatibility: The VB makes it possible to extend an existing class or interface by adding new methods & properties etc. and yet still remain binary compatibility. It can do this, as it silently creates a new interface ID for the extended interface and adds registration code to register the original interface ID but with a new forward key having the value of this new interface ID. COM will then substitute calls having the old ID with the new ID and so applications built against the old interface will continue to work (assuming the inner workings of the component remain backward compatible!). With that setting, VB will not change any of the existing class, interface or type library ID's, however in order that it can do so, VB requires the project to specify an existing compiled version that it can compare against to assure that the existing interfaces have not been broken.