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?
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!
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
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.