How One discovers the API for a COM-exporting application (2007)
wiki.tcl-lang.org
wiki.tcl-lang.org
Apple's CoreMediaIO CFPlugIn video capture device plugin interface!
https://github.com/phracker/MacOSX-SDKs/blob/master/MacOSX10...
/*
File: CMIOHardwarePlugIn.h
Contains: API for the CFPlugIn that implements an CMIO driver for the DAL from user space
Copyright: © 2004-2010 by Apple Inc., all rights reserved.
*/
[...] /*!
@method QueryInterface
@abstract The IUnknown method for finding an interface on a CFPlugIn type.
@param self
The CFPlugIn type to query.
@param uuid
The UUID of the interface to find.
@param interface
The returned interface or NULL if none was found.
@result An error code indicating success of failure.
*/
HRESULT
(STDMETHODCALLTYPE *QueryInterface)( void* self,
REFIID uuid,
LPVOID* interface);
BUSTED!https://github.com/lvsti/CoreMediaIO-DAL-Example/blob/0392cb...
[0] https://developer.apple.com/library/archive/documentation/Co...
You can take a look at the following software (including source code):
RemoteBridge: https://www.nektra.com/products/remotebridge-automation-engi...
Deviare: https://www.nektra.com/products/deviare-api-hook-windows/
This is is not necessarily available for every COM object.
COM objects intended for use with C++ work without it, because the COM interface is based on calling C++ virtual functions, for which you just need a declaration from a header file.
To discover the API of a COM object without the .idl file or type library, you have to do binary reverse engineering: disassemble the functions linked into the object's vtable.
Modern COM (UWP) uses .NET metadata and is stored in .winmd files.
C#, VB.NET, JS(Chakra), C++/CX can use them directly, while with C++/WinRT a source file generator was introduced that generates the necessary boilerplate to access the objects in a C++17 friendly way.
Microsoft now calls to COM libraries without type libraries, like DirectX, mini-COM.