这可能是一个小菜COM的问题,但谷歌搜索引发更多的问题比提供的答案:使用C++“operator new”而不是CoCreateinstance创建COM对象是否安全?
是否可以安全地使用“operator new”而不是CoCreateInstance为本地COM实例?
我所做的:
我实现了IOperationsProgressDialog接口 http://msdn.microsoft.com/en-us/library/windows/desktop/bb775368(v=vs.85).aspx 通过使用公共的传承,从而也实现了IUnknown接口。
我通过“new RecyclerProgressCallback”创建了一个实例,并将其放入COM-Ptr进行生命周期管理。 “RecyclerProgressCallback”是我派生类的名称。
我用这个例子中IFileOperation :: SetProgressDialog http://msdn.microsoft.com/en-us/library/windows/desktop/bb775803(v=vs.85).aspx
摘要:我的方法“似乎”的工作,但我不相信它,周围还有只是太多令人不安的信息COM对象创建仅依赖于可观察行为。
是否有任何微妙的风险,谬误或其他问题?谢谢!
>只是绕过整个COM逻辑。 这就是我希望听到的!经过长时间的阅读,注册新的COM对象不仅在Visual C++ Express中很痛苦,而且会打破我的应用程序的“便携性”。 – Zenju
那么,你仍然必须正确地实现'IUnknown',因为这是你承诺的IOperationsProgressDialog接口的一部分。例如。你的'IOperationsProgressDialog :: QueryInterface(IID_IUnknown)'必须成功等。 – MSalters
是的,我做到了。这是很好的IUnknown是一个抽象的基类,所以我注意到编译器错误后,只实现了IOperationsProgressDialog。因此,整个过程只是普通的C++虚拟函数实现......这比我期望的COM更简单,这让我很怀疑。 – Zenju