我有以下界面。接口返回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对象?
答案 0 :(得分:2)
使用ATL向导创建ISystemCmds的实现。然后通过普通CoCreateInstance创建对象,或使用CComObject<>如果需要以ISystemCmds不支持的方式初始化对象,请使用模板(请参阅方法CreateInstance)。请注意,CComObject<> :: CreateInstance()不像AddInfface()和CoCreateInstance()那样使用AddRef()对象。 AddRef对象,然后传递它!
答案 1 :(得分:1)
获取新的COM对象是一项繁重的操作,所以我认为你应该考虑一个变量,其中一个类实现了几个接口,因为我认为这是一个完全有效的假设ISystemCmds
不会超过IDevice
}。因此,考虑使用同一个类实现两个接口并在QueryInterface
内调用GetSystemCommandInterface
。