Redian新闻
>
COM里CoCreateInstance为什么要用类厂?
avatar
COM里CoCreateInstance为什么要用类厂?# Programming - 葵花宝典
r*o
1
【 以下文字转载自 Money 讨论区 】
发信人: roro (yoyo~Madredeus-Miradouro de Santa Catar), 信区: Money
标 题: discover已经没有银联标志了
发信站: BBS 未名空间站 (Wed Mar 3 09:15:12 2010, 美东)
今年回国才发现那儿都不能用了,还有什么卡有银联啊?
visa, ms都没有银联好用
avatar
m*d
2
rt
avatar
O*C
3
据说美联储子弹用尽,准备上炮弹了。
如果美联储直接进场买股票,会造成什么后果?
股价大涨,国债大跌是必然的;通胀会不会立刻上来呢?
如果通胀率涨上来了,但是美联储死活不加息,用长期的负利息盘剥我们储蓄者,该怎
么办呢?
avatar
G*L
4
戒烟全是老生常谈了。网上有一种声音是这么说的。一位父亲对女儿说:“不要和成功
戒烟的男人谈恋爱,男人对香烟的依赖程度不是一般人可以想象的,他能戒烟成功,得
对自己多狠?对自己这么狠,你能想象他对别人是什么样吗?”做为一名父亲,抛出这
样的观点,先不说他说的对与错,只针对他对女儿的呵护,我认为这句话是对的。
从另一方面来看,能成功戒烟的人确实让人侧目。戒烟对于大多数烟民来说是不可触碰
的,原因自不多说,有很多。但是能够戒烟的人,我认为有以下几个方面:一是身体条
件不允许,比如查出某方面疾病,必须强制戒烟的。二是有大毅力者,这类人确实有过
人的意志力和自制力,他们也许是为了没有烟雾缭绕,也许是为了环境健康,也许是为
了美女青睐,不管是哪方面的原因促使他戒烟成功,都应为他的行为点赞。戒烟的成功
并不是单一的意志力的体现,我们更应看到的是一种人文的美德和关怀。所以具体到是
否要和戒烟成功的人士交往,还要看此人别的方面的德和行。
avatar
i*e
5
蜻蜓
青影遥遥红霞里
无语婷婷独玉立
蝉翼轻薄飞九天
慧眼繁复觅知己
依草伴荷是美画
点水成漪为传奇
池中生来云里去
晚照微澜留踪迹
20130920 ihappie
avatar
o*n
6
有两个文档,有没有什么方便快捷的方法能找出两个文档中相同的词显示出来?
其实是要比较两个网页,要是有啥plug-in之类的能直接比较两个网页就更好了,比如
把两个网页都出现的词highlight出来。
多谢!
avatar
d*i
7
鄙夷老技术者跳过哈。
越发想不明白。
调用路线开始是: CoCreateInstace --> CoGetClassObject --> DllGetClassObject
尚可理解,无非是 CoGetClassObject通过查找注册表,得知DLL路径,然后调用DLL中
DllGetClassObject。
用CLSID替代了直接loadLibrary那个DLL(那样的话需知道名字和路径),
进而靠DLL中的这个输出函数DllGetClassObject试图得到COM组件的指针,即简化版本
中CreateInstance起到的作用。
问题是这个DllGetClassObject没直接new出来个COM组件返回了事,而是整出个本组件
独有的类厂给返回了。
该指针一直返回到CoCreateInstace,才被用来CreateInstance()。
我是狗搜了半天,读遍数篇讲解,也没搞清这个reasoning(靠类厂去CreateInstance)
到底在哪儿。
按说既然这个类厂也是写组件的人写的,引入类厂就有点多此一举了。
DllGetClassObject直接做了CreateInstance()做的事(new出来个组件)返回就得了。何
必要假手这个类厂呢?
为这辩解的说法大多似是而非,唯一靠点边的是说什么"类厂松耦了客户知道组件如何
创建的细节",可这明摆着是CoCreateInstace-->CoGetClassObject的贡献啊,和里边
走不走类厂半毛钱的关系都没有。
让DllGetClassObject直接new出组件返回,依然隐藏了这个组件如何被创建的细节(客
户仍然是只靠CLSID/IID得到接口指针)。因为这已然是server端的细节了,全是做COM
组件的同一个人写的,类不类厂的关客户何事啊?
总之一头雾水。可自己水平有限,又不忍相信MS故弄玄虚。
还请牛牛们明示。
谢谢!
avatar
t*s
8
真的?那麻烦多了。
avatar
M*c
9
还没有,具体的理由看我刚刚写的文章。

【在 m**********d 的大作中提到】
: rt
avatar
s*n
10
美联储不到崩盘是不会明着购买股票的,实在没有任何借口。
但是危机的时候实际上 Treasury 不就是在买 Citi 等银行的股票么。
美联储几年内都加不了息,对付通胀,买黄金白银啊。

【在 O***C 的大作中提到】
: 据说美联储子弹用尽,准备上炮弹了。
: 如果美联储直接进场买股票,会造成什么后果?
: 股价大涨,国债大跌是必然的;通胀会不会立刻上来呢?
: 如果通胀率涨上来了,但是美联储死活不加息,用长期的负利息盘剥我们储蓄者,该怎
: 么办呢?

avatar
X*r
11
This is not COM-specific but just common OO pattern.
Returning a class factory object separates two logic: finding out
how to create a specific kind of objects that adhere to a given
interface, and creating these objects with given parameters.
Once you have the factory, you can create multiple instances with
different parameters at any time without repeating the former logic.
If you don't explicitly need the class factory object, just call
CoCreateInstance as a shortcut. But as a framework library it must
provide this flexible design.

【在 d******i 的大作中提到】
: 鄙夷老技术者跳过哈。
: 越发想不明白。
: 调用路线开始是: CoCreateInstace --> CoGetClassObject --> DllGetClassObject
: 尚可理解,无非是 CoGetClassObject通过查找注册表,得知DLL路径,然后调用DLL中
: DllGetClassObject。
: 用CLSID替代了直接loadLibrary那个DLL(那样的话需知道名字和路径),
: 进而靠DLL中的这个输出函数DllGetClassObject试图得到COM组件的指针,即简化版本
: 中CreateInstance起到的作用。
: 问题是这个DllGetClassObject没直接new出来个COM组件返回了事,而是整出个本组件
: 独有的类厂给返回了。

avatar
i*n
12
什么时候的事?我两周前还在武汉用过

【在 r**o 的大作中提到】
: 【 以下文字转载自 Money 讨论区 】
: 发信人: roro (yoyo~Madredeus-Miradouro de Santa Catar), 信区: Money
: 标 题: discover已经没有银联标志了
: 发信站: BBS 未名空间站 (Wed Mar 3 09:15:12 2010, 美东)
: 今年回国才发现那儿都不能用了,还有什么卡有银联啊?
: visa, ms都没有银联好用

avatar
m*d
13
多谢,刚看到 :)

【在 M******c 的大作中提到】
: 还没有,具体的理由看我刚刚写的文章。
avatar
y*g
14
黄金白银 already inflated.
avatar
x*u
15
你倒是把类厂的接口看一下啊。
类厂的一个重要意义是LockServer。

【在 d******i 的大作中提到】
: 鄙夷老技术者跳过哈。
: 越发想不明白。
: 调用路线开始是: CoCreateInstace --> CoGetClassObject --> DllGetClassObject
: 尚可理解,无非是 CoGetClassObject通过查找注册表,得知DLL路径,然后调用DLL中
: DllGetClassObject。
: 用CLSID替代了直接loadLibrary那个DLL(那样的话需知道名字和路径),
: 进而靠DLL中的这个输出函数DllGetClassObject试图得到COM组件的指针,即简化版本
: 中CreateInstance起到的作用。
: 问题是这个DllGetClassObject没直接new出来个COM组件返回了事,而是整出个本组件
: 独有的类厂给返回了。

avatar
s*x
16
discover从来不把银联标志印在卡上吧,但是都是可以刷的。
我今年也在几个城市刷过,没有问题
discover的官网上银联标志也在
http://www.discovercard.com/customer-service/faq/asia.html
不知道楼主的咕咚是从哪里听来的?

【在 i*n 的大作中提到】
: 什么时候的事?我两周前还在武汉用过
avatar
d*i
17
多谢。
可偶觉得既然这个CoCreateInstance的职能本来就是返回个COM组件的指针了事,
何不就干干净净地不走类厂直接new出来返回呢?反正它也没责任把什么类厂的指针也
返回给客户。
当然你说了,做框架的要给客户option去把两种logic分开,即不再重复前面得到类厂(i
.e. identify how to create a specific kind of objects that adhere to a given
interface)的过程,而是只拿一次类厂指针,反复使用去Create Objects。这点偶相
当赞成。相信COM程序员看了CoGetObjectClass的说明,自然会写出上述的Code(即拿到
一个类厂指针反复用),因为这是引入类厂的意义之一。这种领会应该不是靠读
CoCreateInstance的源码得到的吧。
Again,CoCreateInstance就是返回一个指定COM组件的指针。看了源码,说它是通过类
厂生成一次组件的某种类厂应用也一点不错。
但是为什么CoCreateInstance这种简单职能的函数的源码偏被写成这样(假手类厂),还
是没说清楚啊。难不成非要force人用类厂,兼有教材的目的?不懂啊。
In short,类厂好不好放一边儿,为什么被用在CoCreateInstance这种函数里还是个谜
。Serve同样的purpose,一个函数该写成逻辑最简单的版本,不能为了用点私货或sell
some points就故意绕弯子。

【在 X****r 的大作中提到】
: This is not COM-specific but just common OO pattern.
: Returning a class factory object separates two logic: finding out
: how to create a specific kind of objects that adhere to a given
: interface, and creating these objects with given parameters.
: Once you have the factory, you can create multiple instances with
: different parameters at any time without repeating the former logic.
: If you don't explicitly need the class factory object, just call
: CoCreateInstance as a shortcut. But as a framework library it must
: provide this flexible design.

avatar
f*e
18
discover能在网上也当银联卡用吗?比如携程买国内机票
昨天买完票才发现有中国银联这个选项,早知道就试一下了,结果用了AE,收3%手续费
。很好奇,如果discover好用的话,下次用它,省了手续费了
avatar
i*n
19
不能

【在 f**********e 的大作中提到】
: discover能在网上也当银联卡用吗?比如携程买国内机票
: 昨天买完票才发现有中国银联这个选项,早知道就试一下了,结果用了AE,收3%手续费
: 。很好奇,如果discover好用的话,下次用它,省了手续费了

avatar
s*p
20
很多地方是看见没有银联的标志,所以拒绝收卡,在成都的伊藤搞了半天,才终于有人
知道这是什么卡,最后刷卡成功,当外卡刷的话还不行
avatar
s*x
21
直接跟他们说,上面的标志没有印出来,但是其实是银联卡。上来就叫他们按照银联无
密码卡刷。

【在 s*******p 的大作中提到】
: 很多地方是看见没有银联的标志,所以拒绝收卡,在成都的伊藤搞了半天,才终于有人
: 知道这是什么卡,最后刷卡成功,当外卡刷的话还不行

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。