IDL中不可创建的coclasses的目的是什么?

时间:2009-04-30 14:15:24

标签: com interop com-interop idl midl

在IDL中声明如下所示的不可创建的coclass的原因是什么?

[
    uuid(uuidhere),
    noncreatable
]
coclass CoClass {
    [default] interface ICoClass;
};

我的意思是这样的课程无论如何都不会注册到COM。在IDL文件和编译该IDL文件生成的类型库中提及它的原因是什么?

2 个答案:

答案 0 :(得分:2)

noncreatable属性只是对对象的消费者的提示 - .Net和VB6,例如,当看到此属性时,将不允许客户端以“正常方式”创建对象,例如,通过调用New CoClass()[VB6]。

但是,COM服务器的类工厂是决定是否允许创建给定类的对象的明确权限 - 所以事实上,类可能被标记为不可创建但是,类工厂允许要创建的对象。为避免出现这种情况,请确保相应地更新班级工厂。

在IDL中提到不可创建的类实际上是可选的。但是请注意,无论如何你都可以获得至少一个好处:midl将创建CLSID_CoClass常量等。

答案 1 :(得分:1)

当你想要阻止客户端使用默认的类工厂实例化对象但仍然有一个适当的CLSID用于记录,调试& c;

noncreatable是好的。请参阅问题的http://www.eggheadcafe.com/software/aspnet/29555436/noncreatable-atl-object.aspx处的示例,该问题已正确解决。