如何使用CComCoClass创建单例 [英] How to use CComCoClass to create a singleton

查看:86
本文介绍了如何使用CComCoClass创建单例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的类中使用DECLARE_CLASSFACTORY_SINGLETON,但CComCoClass :: CreateInstance仍会在每次调用时返回一个新实例。但是,CComCoClass :: CreateInstance的文档明确指出:" COM对象
的创建由为此ATL类注册的类工厂执行。 (
https://docs.microsoft.com/en-us/cpp/atl/reference/ccomcoclass-class#createinstance

I use DECLARE_CLASSFACTORY_SINGLETON in my class, but CComCoClass::CreateInstance still returns a new instance on each call. However, the documentation for CComCoClass::CreateInstance explicitly states: "The creation of the COM object is carried out by the class factory registered for this ATL class." (https://docs.microsoft.com/en-us/cpp/atl/reference/ccomcoclass-class#createinstance)

这是文档或实现中的错误吗?

Is this a bug in the documentation or implementation?

注意:在相关帖子中(https://social.msdn。 microsoft.com/Forums/en-US/fb904036-6e5e-4953-8865-e6e7fda4e550/how-to-make-ccomcoclass-singleton?forum=vcgeneral)the"solution""只是调用CoCreateInstance,这确实可以正常工作。

Note: In a related post (https://social.msdn.microsoft.com/Forums/en-US/fb904036-6e5e-4953-8865-e6e7fda4e550/how-to-make-ccomcoclass-singleton?forum=vcgeneral) the "solution" is to just call CoCreateInstance, and this indeed does work as intended.

推荐答案

你好zvrba,

Hi zvrba,

感谢您在此处发帖。

>>我在我的课程中使用DECLARE_CLASSFACTORY_SINGLETON,但CComCoClass :: CreateInstance仍然返回每次通话都有一个新实例。但是,CComCoClass :: CreateInstance的文档明确指出:" COM对象的创建
由为此ATL类注册的类工厂执行。" ( https://docs.microsoft.com/en-us/cpp/atl/reference/ccomcoclass-class#createinstance <跨度>的

>>I use DECLARE_CLASSFACTORY_SINGLETON in my class, but CComCoClass::CreateInstance still returns a new instance on each call. However, the documentation for CComCoClass::CreateInstance explicitly states: "The creation of the COM object is carried out by the class factory registered for this ATL class." (https://docs.microsoft.com/en-us/cpp/atl/reference/ccomcoclass-class#createinstance)

DECLARE_CLASSFACTORY_SINGLETON宏用于将CComClassFactorySingleton声明为类工厂。要使用CComClassFactorySingleton,请在对象的类定义中指定DECLARE_CLASSFACTORY_SINGLETON宏。例如:

The DECLARE_CLASSFACTORY_SINGLETON macro is used to declare CComClassFactorySingleton to be the class factory. To use CComClassFactorySingleton, specify the DECLARE_CLASSFACTORY_SINGLETON macro in your object's class definition. For example:

class ATL_NO_VTABLE CMySingletonClass :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMySingletonClass, &CLSID_MySingletonClass>,
   public IMySingletonClass
{
public:
   DECLARE_CLASSFACTORY_SINGLETON(CMySingletonClass)

然后你可以调用
CComClassFactorySingleton :: CreateInstance
以检索接口指针。

Then you could call CComClassFactorySingleton::CreateInstance to retrieve an interface pointer.

>>在相关帖子中(https://social.msdn.microsoft.com/Forums/en-US/fb904036-6e5e-4953-8865-e6e7fda4e550/how-to-make-ccomcoclass- singleton?forum = vcgeneral)"解决方案"只是打电话给CoCreateInstance,这确实按预期工作

如果你仔细阅读案例,你会发现答案是停止使用CComObject :: CreateInstance。

If you read the case carefully, you will find the the answer is to stop using CComObject::CreateInstance.

希望这可以帮到你。

最好的问候,

Baron Bi

Baron Bi


这篇关于如何使用CComCoClass创建单例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆