JMTS -
Who's doing the building of the DLL's? There needs to be one person designated as the "build master" for each DLL. If two or more people build the DLL without compatibility being set, you get two different GUIDs being assigned, and OLE thinks you've got two different DLLs that just happen to have the same name (i.e. it gets confused).
What I've done in the past to allow other developers to build the *.exe (for testing on their PC only!) is to have a network share that has the "reference" copy of the DLL. When it comes time to update that to the next version, the build master builds the DLL with compatibility turned on, then overwrites the reference DLL with the newer one. Since they had compatibility turned on, it gets the same GUID as before, and has it's OLE version incremented (which is not the same as the file version).
You should also have the "auto-increment" version number flag turned on, so that you can right-click the DLL or OCX and see at a glance in the file's properties which one is newer, without trusting the date/timestamp (which the Microsoft networking occasionally resets when doing a filecopy).
If the programmers do something to break compatability (like remove a parameter from a public function, or remove/rename a class, or remove a function no longer used), the build master gets to hit them with a keyboard wrist-rest
Shortly before release, a build should be done that intentionally breaks compatability. This is your chance to clean up all the stuff left over from the internal builds. Because it breaks compatability and everyone has to then reset their references (a real PITA), you want to do this as seldom as possible.
Chip H.