我有以下接口。该接口返回ISystemCmds
接口,作为GetSystemCommandInterface
方法的一部分。我们正在使用ATL创建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);
};
如果为ISystemCmds
创建COM对象,应该添加什么代码(以及在哪里)
a。我正在为ISystemCmds创建COM对象,作为IDevice
的COM对象创建的一部分
b.我正在用GetSystemCommandInterface
()方法创建COM对象?
使用ATL向导创建ISystemCmds的实现。然后通过普通的CoCreateInstance创建对象,或者使用CComObject<>模板(请参阅方法CreateInstance),如果您需要以ISystemCmds不支持的方式初始化对象。请注意CComObject<>:CreateInstance()不像QueryInterface()和CoCreateInstance(!
获取新的COM对象是一项相当繁重的操作,因此我认为您应该考虑一个类实现多个接口的变体,因为我认为ISystemCmds
不会比IDevice
更长寿是一个完全有效的假设。因此,考虑使用同一个类实现这两个接口,并在GetSystemCommandInterface
内部调用QueryInterface
。