Scripting COM components in Haskell (1998) [pdf]
cmpct.info
cmpct.info
For better or worse the shift to cross-platform development killed that all stuff off. The closest equivalent is now the JVM, but it requires everything to share a runtime whereas COM was much less imposing. Also the higher level nature of JVM bytecode makes it less attractive to build commercial components in it, whereas OCX controls were a working market of software components.
After the Longhorn collapse, all major ideas that were originally implementated in .NET got redone in COM.
Eventually WinRT doubled down on it, and even if they messed up the whole execution, the main goal of Project Reunion is to bring them into regular Windows, now rebranded as WinUI 3.0/AppSDK.
Parallel to that, many .NET APIs on Windows are COM wrappers at their lowest layer.
Classical Win32 C like APIs, are effectively "stable" since Windows XP
It's a pleasure seeing a template word document being managed and compose by python and then sent to a printer to fill report.
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = TrueAnd on Windows making a business out of selling components is still a thing.
Additionally any application that integrates into the OS for file viewers, userspace drivers, shell extensions, or any other OS extension point, needs to implement COM interfaces.