是否可以创建 COM 对象的单个实例,并确保来自任何客户端的所有后续调用都只对这个单个实例进行?
最佳答案
请注意,您必须使 COM 对象在进程外运行(由 EXE 公开)。
您真的需要到处都使用的完全相同的 COM 对象吗?还是只想从单个控制点控制相同的底层资源?
COM 不直接支持单例模式,但也没有严格禁止。只是没有注册表设置说“始终为相同的对象提供服务”。实际上,标准的 COM 实例化机制要求每次调用时都返回一个真正的新对象(这种机制是 new
运算符和 CreateInstance()
内部使用的机制)。这意味着要制作一个合适的 COM 单例,您不能让您的客户自己创建它。这一切都可以完成,但它很棘手,而且很少需要。
你最好的选择 - 足够有趣 - 根本没有 COM 单例。让客户端根据需要创建尽可能多的不同对象。代替单个 COM 对象,允许多个 COM 对象,但使这些对象与单个内部对象实现通信的“垫片”。根本不要将内部单例实现直接公开为 COM 对象。您将避免很多头痛。
关于.net - 需要单例 COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6252334/