OverviewThe object retrieves a valid pointer to a local COM object's interface or a remote DCOM object's interface simply by calling its main method ('getInterfacePointer') with the object's and interface's NAME or ID. This class saves you lots of time by doing all the name<->ID/CLSID conversion and handling all needed Window's APIs by itself while the object's input is simply a reference to what you want (object,interface) and the returning output is a valid pointer to it. Many times there is a need to create a wrapper for a given interface. This can be done be done using this object in two ways,
- Simply inherit the object, call the main function on your initialization method and use the protected '_pInterface' member in your 'raaping' methods. That's it!
- Create an instance of this object in your class
- Use the main method ('getInterfacePointer') for retrieving an interface and keep the interface in a local member.
The code here is also a great example of how to use Windows API for handling COM/DCOM objects.
Method Descriptions and Definitions
Main function : getInterfacePointer
int getInterfacePointer(IUnknown **ppInterface, void *comObjectInfo, void *interfaceObjectInfo, int flags = SKDCOM_COMINFO_NAME | SKDCOM_INTERFACEINFO_NAME, void *computerName = NULL, COAUTHINFO *pAuthInfo = NULL);
ppInterface [out] Pointer for interface pointer in which the method should enter the desired interface's pointer. comObjectInfo [in] COM object's description. can be name [OLE string !] or CLSID. interfaceObjectInfo [in] Interface's description. can be name [OLE string] or IID. flags [in] flags which describes 'comObjectInfo' and 'interfaceObjectInfo'
use SKDCOM_COMINFO_NAME - when 'comObjectInfo' is object's a name (such as 'MyCOM.Engine')
SKDCOM_COMINFO_CLASID - when 'comObjectInfo' is object's an CLSID.
SKDCOM_INTERFACEINFO_NAME - when 'interfaceObjectInfo' is a name (such as 'MyCOM.Engine.iXYZ')
SKDCOM_INTERFACEINFO_REFIID - when 'interfaceObjectInfo' is an IID
each flag value should be a logical or of 'comObjectInfo' and 'interfaceObjectInfo' descriptions.
default value is name for both.
computerName [in] points to a computer name. DCOM ONLY. if NULL object uses COM. pAuthInfo [in] points to a 'COAUTHINFO' object. DCOM ONLY. if NULL object uses default security parameters.
void getCLSID(CLSID *clsid) const;
clsid [out] Pointer to a CLSID instance which will recieve object's CLSID value.
RemarksRetrieves object's CLSID (even if main method was called with name for object's description)
- SKDCOM_ERROR_CLSID_NAME_NOT_FOUND - object's name was not found.
- SKDCOM_ERROR_CLSID_NOT_FOUND - object's ID was not found.
- SKDCOM_ERROR_IID_NOT_FOUND - interface's ID was not found.
- SKDCOM_ERROR_IID_NAME_NOT_FOUND - interface's name was not found.
- SKDCOM_ERROR_FAIL - function failed.
- SKDCOM_SUCCESS - success. output parameter is valid.
void getIID(IID *iid) const;
iid [out] Pointer to an IID instance which recieve interface's IID value.
RemarksRetrieves interface's IID (even if main method was called with name for interface description)
void getLastRetrivedInterface(IUnknown **ppInterface) const;
ppInterface [out] Points to an interface pointer
RemarksEnters last retrived pointer to 'ppInterface'.
HRESULT getLastSystemError() const;
Return ValueReturns system last error (Window's API error code).