COM has nothing to do with fixing DLL hell, it is as old as OLE, and uses DLLs as well.
COM fixes having a cross language OOP ABI, that is all.
The things that were supposed to fix that were:
1- Version resources, which hardly matter, because the app loading them has to validate the versions itself
2- .NET, hence the Global Assembly Cache and having the version as part of the Assembly (DLL) lookup. Still has issues if the lookup rules were badly configured on the app.
3- Application manifests, bringing the .NET ideas to Win32
4- Registry Free COM, extension of app manifests, allowing direct lookup of desired COM libraries without going through the registry for the version
5- UWP sandbox, didn't took off, only what is inside the sandbox is searched for
6- Easiest one, don't put stuff all over the place, only search inside an application specific directory
COM fixes having a cross language OOP ABI, that is all.
The things that were supposed to fix that were:
1- Version resources, which hardly matter, because the app loading them has to validate the versions itself
2- .NET, hence the Global Assembly Cache and having the version as part of the Assembly (DLL) lookup. Still has issues if the lookup rules were badly configured on the app.
3- Application manifests, bringing the .NET ideas to Win32
4- Registry Free COM, extension of app manifests, allowing direct lookup of desired COM libraries without going through the registry for the version
5- UWP sandbox, didn't took off, only what is inside the sandbox is searched for
6- Easiest one, don't put stuff all over the place, only search inside an application specific directory