在另一个COM对象内创建COM对象



我有以下接口。该接口返回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

相关内容

最新更新