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

时间:2011-06-08 08:51:13

标签: c++ com windows-ce atl

我有以下界面。接口返回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对象时应添加哪些代码(以及在哪里)

一个。我正在为ISystemCmds创建COM对象,作为IDevice的COM对象创建的一部分? 湾我在GetSystemCommandInterface()方法中创建COM对象?

2 个答案:

答案 0 :(得分:2)

使用ATL向导创建ISystemCmds的实现。然后通过普通CoCreateInstance创建对象,或使用CComObject<>如果需要以ISystemCmds不支持的方式初始化对象,请使用模板(请参阅方法CreateInstance)。请注意,CComObject<> :: CreateInstance()不像AddInfface()和CoCreateInstance()那样使用AddRef()对象。 AddRef对象,然后传递它!

答案 1 :(得分:1)

获取新的COM对象是一项繁重的操作,所以我认为你应该考虑一个变量,其中一个类实现了几个接口,因为我认为这是一个完全有效的假设ISystemCmds不会超过IDevice }。因此,考虑使用同一个类实现两个接口并在QueryInterface内调用GetSystemCommandInterface