I understand that the basic problem COM solves is the issue with binary compatibility of software libraries. That is why a lot of (low level) windows services are exposed through the COM system. But why is the Windows API itself not exposed through COM? It seems that the DLLs implementing the Windows API have somehow managed to stay binary compatible with all sorts of compilers and as such the Windows API has no need to be exposed through COM.
Related Questions in C
- How to call a C language function from x86 assembly code?
- What does: "char *argv[]" mean?
- User input sanitization program, which takes a specific amount of arguments and passes the execution to a bash script
- How to crop a BMP image in half using C
- How can I get the difference in minutes between two dates and hours?
- Why will this code compile although it defines two variables with the same name?
- Compiling eBPF program in Docker fails due to missing '__u64' type
- Why can't I use the file pointer after the first read attempt fails?
- #include Header files in C with definition too
- OpenCV2 on CLion
- What is causing the store latency in this program?
- How to refer to the filepath of test data in test sourcecode?
- 9 Digit Addresses in Hexadecimal System in MacOS
- My server TCP doesn't receive messages from the client in C
- Printing the characters obtained from the array s using printf?
Related Questions in WINAPI
- How to immediately apply DISPLAYCONFIG_SCALING display scaling mode with SetDisplayConfig and DISPLAYCONFIG_PATH_TARGET_INFO
- Changing the theme of a #32768 (menu) window class at runtime
- Issue with GetOpenFileName while debugging
- How to populate a ListBox with SendMessage?
- Is there a function to end a child process?
- HDR video publishing
- Frameless Qt + WinAPI maximized window size is bigger than the availableGeometry()
- Mount .iso file with python
- What is Win32 x86-64 CONTEXT::VectorRegister for?
- WinAPI - right mouse drag & drop and IContextMenu
- Win32 per-filesystem cache tuning?
- Client connection timeout during Android & Windows PC communication via sockets
- MessageBoxEx sometimes shows as hollow window, border only, and only on Windows 11
- Win32api send message and Pydirectinput and Powertoy (Keyboard Manager ) Not working when open the application
- Would it be possible to run an application right after csrss.exe loads? (Windows)
Related Questions in DLL
- How to find a sequence of bytes on the target program from my injected dll?
- .lib not generated when building DLL project using template class
- The file "spng.dll" is not founded in my Visual Studio's project and i get an error
- Handling Memory Allocation and Pointers in Electron between Node.js and C++ DLL
- Multi level project reference using dll
- Wix MSI Project Harvesting Error Message 'dll is not running' on Build
- Windows Custom Credential Provider is not displaying tile on logon for all users in a pc
- How can I verbosely track the whole process of calling a function?
- Is dll static var shared between threads that load the same dll?
- JNR-FFI - Callback Pointer crash
- How can I patch a function call to a Windows DLL (e.g. kernel32 LoadLibrary)? Is this even possible?
- PyInstaller with PyQt5 Generates "DLL load failed" Error for QtPrintSupport
- What happens if I link two different libraries providing the same symbols in Visual Studio?
- how to test .dll on Linux
- PHP FFI - How to free memory created by FFI::new("void*[2]", false, true)
Related Questions in COM
- How to program a COM object with an IEnumerator, IEnumerable interface inside
- WinAPI - right mouse drag & drop and IContextMenu
- Function Returning Excel COM Objects Unexpectedly
- Windows ContextMenuHandler names - Document conflict?
- How to publish a console application with COM interop and trim unused code
- IContextMenu Handler - Should ShellExecute or CreateProcess be used to InvokeCommand?
- Windows Explorer Conditional Context Menu Item for Drive?
- How do I fix an error while trying to send email using Outlook with COM?
- ITypeLib2.GetLibStatistics() always throws AccessViolationException in C#
- Directwrite is not always able to query font
- How can I pass a C++ struct to a C# DLL method using COM interop
- VBA PowerPoint Run-time error '-2147467259' (80004005): Presentation.Close: Failed
- PHP using a dll with COM + dotnet
- d3d11 triangle rendering failure despite everything being properly initialized
- COM context menu InvokeCommand not being called
Related Questions in BINARY-COMPATIBILITY
- Binary compatibility libraries same compiler and compiler version, different OS version
- will adding a new bit-field to my C-struct break binary-compatibility?
- Running old JDK/JVM versions in a modern Linux environment
- build.sbt does not Work with Different Scala Versions
- NoClassDefFoundError: scala/collection/TraversableOnce (Using Phantom Library To Fetch Data From ScyllaDB Cluster)
- Reflection to call method that had its name changed in an upgrade?
- NoSuchMethodError: scala.tools.nsc.Settings.usejavacp()Lscala/tools/nsc/settings/AbsSettings$AbsSetting;
- Scala: Classfile-level interoperability from 2.12 to 2.13? vice versa?
- Does removing a redundant superinterface from a Java class break binary compatibility?
- Why is the Windows API not exposed through COM?
- runtime detection whether ARMv7 ELF binaries can be loaded on ARMv6 host
- nanopb - binary compatibility between different processor architectures
- Linux binary compatible distros and floating points
- How to resolve the java.lang.IncompatibleClassChangeError coming due to third party SDK update?
- How to change the version of a dependency during test execution to test binary compatibility with maven?
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Popular Tags
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
The basic Windows ABI is stable and is as compatible as COM. If a compiler supports COM it supports the basic API as well, on x86 they are both stdcall functions.
Exposing everything as a COM interface does not make sense for many reasons.
CoCreateInstanceway too much. Pointless reference counting overhead.CreateFileandCreateProcesscan only ever be implemented by Microsoft and it does not make any sense for 3rd-party software to provide/override implementations of low-level functions.The only positive would be that high-level scripting code could call these functions but in practice most COM interfaces are not dual and do not support
IDispatchand therefore cannot be scripted. The exceptions are Internet Explorer, Office and some of the shell stuff (Shell.Application).For things that are extensible or runs out-of-process, COM makes a lot of sense. It is easy to define the interfaces and IPC is taken care of for you.
With the introduction of UWP/WinRT you are somewhat getting your wish...