什么是COM不可创建类?它与可创建类有什么不同?该怎么处理
什么是COM不可创建类?它与可创建类有什么不同?
什么是COM不可创建类?它与可创建类有什么不同?
------解决方案--------------------
不可创建类具体就是没有类对象的COM类。它从内存角度来说(或者说binary角度)符合COM对象的规范。只是不能从外部创建它而已,你自己内部仍然可以创建它。
------解决方案--------------------
比如msxml中的IXMLDOMNode 只能被IXMLDOMDocument这个COM对象创建.
你不能直接创建IXMLDOMNode这个COM对象
------解决方案--------------------
coclass的类,客户端才能创建...就是有自己的CLSID的类...
------解决方案--------------------
不可创建就是你不想让用户直接CoCreate的类。一个直观的例子比如Excel的每个小Cell,它脱离开Document就没有什么任何意义,所以不能让用户直接创建。而需要从Document那里得到(实际情况可能不是这样,举个例子)。 这种类通常是由一个Class工厂或者一个Class Manager那里拿到。它是Class,也有Class ID。
------解决方案--------------------
类对象,也叫类厂,COM规范规定,一个COM类必须对应一个类厂,由类厂来创建COM对象,管理对象的生命周期。这些都是COM基础。
在ATL里面的Object Map里面,用这个宏:
You use the OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO macro to specify a class that does not have an associated class object. Often these are non-top-level objects in an object model. Clients typically must call a method on a higher-level object in the object hierarchy to obtain an instance of this class. Because the specified class does not have an associated class object, clients cannot create an instance by calling CoCreateInstance.
这些都可以看ATL Internals: Working with ATL 8, Second Edition.
------解决方案--------------------
难道还有没有CLSID的类?
能举例说说吗?
---------------
有,普通类就是.
很简单的,自己试试就明白了
一般来说放在
BEGIN_OBJECT_MAP...
END_OBJECT_MAP
之间的,就是有CLSID的类,外面可以创建
不在这两个宏之间的,就是外面不能创建的...
什么是COM不可创建类?它与可创建类有什么不同?
------解决方案--------------------
不可创建类具体就是没有类对象的COM类。它从内存角度来说(或者说binary角度)符合COM对象的规范。只是不能从外部创建它而已,你自己内部仍然可以创建它。
------解决方案--------------------
比如msxml中的IXMLDOMNode 只能被IXMLDOMDocument这个COM对象创建.
你不能直接创建IXMLDOMNode这个COM对象
------解决方案--------------------
coclass的类,客户端才能创建...就是有自己的CLSID的类...
------解决方案--------------------
不可创建就是你不想让用户直接CoCreate的类。一个直观的例子比如Excel的每个小Cell,它脱离开Document就没有什么任何意义,所以不能让用户直接创建。而需要从Document那里得到(实际情况可能不是这样,举个例子)。 这种类通常是由一个Class工厂或者一个Class Manager那里拿到。它是Class,也有Class ID。
------解决方案--------------------
类对象,也叫类厂,COM规范规定,一个COM类必须对应一个类厂,由类厂来创建COM对象,管理对象的生命周期。这些都是COM基础。
在ATL里面的Object Map里面,用这个宏:
You use the OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO macro to specify a class that does not have an associated class object. Often these are non-top-level objects in an object model. Clients typically must call a method on a higher-level object in the object hierarchy to obtain an instance of this class. Because the specified class does not have an associated class object, clients cannot create an instance by calling CoCreateInstance.
这些都可以看ATL Internals: Working with ATL 8, Second Edition.
------解决方案--------------------
难道还有没有CLSID的类?
能举例说说吗?
---------------
有,普通类就是.
很简单的,自己试试就明白了
一般来说放在
BEGIN_OBJECT_MAP...
END_OBJECT_MAP
之间的,就是有CLSID的类,外面可以创建
不在这两个宏之间的,就是外面不能创建的...