在IDL中声明如下所示的不可创建的coclass的原因是什么?
[
uuid(uuidhere),
noncreatable
]
coclass CoClass {
[default] interface ICoClass;
};
我的意思是这样的课程无论如何都不会注册到COM。在IDL文件和编译该IDL文件生成的类型库中提及它的原因是什么?
答案 0 :(得分:2)
noncreatable属性只是对对象的消费者的提示 - .Net和VB6,例如,当看到此属性时,将不允许客户端以“正常方式”创建对象,例如,通过调用New CoClass()[VB6]。
但是,COM服务器的类工厂是决定是否允许创建给定类的对象的明确权限 - 所以事实上,类可能被标记为不可创建但是,类工厂允许要创建的对象。为避免出现这种情况,请确保相应地更新班级工厂。
在IDL中提到不可创建的类实际上是可选的。但是请注意,无论如何你都可以获得至少一个好处:midl将创建CLSID_CoClass常量等。
答案 1 :(得分:1)
noncreatable是好的。请参阅问题的http://www.eggheadcafe.com/software/aspnet/29555436/noncreatable-atl-object.aspx处的示例,该问题已正确解决。