Reputation: 5203
I have the following interface. The interface returns ISystemCmds
interface as part of GetSystemCommandInterface
method. We are using ATL for creating the COM.
interface IDevice : IDispatch{
[id(1), helpstring("method Connect")] HRESULT Connect([in] VARIANT varPortNo);
[id(2), helpstring("method GetSystemCommandInterface")] HRESULT GetSystemCommandInterface([out,retval] ISystemCmds** pISystemCmd);
};
What code should add (and where) for creating the COM object for ISystemCmds
if
a. I am creating the COM object for ISystemCmds as part of COM object creation of IDevice
?
b. I am creating the COM object in GetSystemCommandInterface
() method?
Upvotes: 3
Views: 546
Reputation: 4887
Use the ATL wizard to create the implementation of ISystemCmds. Then create the object through normal CoCreateInstance, or use the CComObject<> template (see method CreateInstance) if you need to initialize the object in a way that ISystemCmds does not support. Be aware that CComObject<>::CreateInstance() does not AddRef() your object like QueryInterface() and CoCreateInstance() do. AddRef the object before passing it along!
Upvotes: 2
Reputation: 1632
Getting new COM objects is rather a heavy operation so I think you should consider a variant where one class implements several interfaces as I think it is a perfectly valid assumption that ISystemCmds
is not going to outlive IDevice
. So think about implementing both interfaces using the same class and calling QueryInterface
inside of GetSystemCommandInterface
.
Upvotes: 1