游戏开发论坛

 找回密码
 立即注册
搜索
查看: 13127|回复: 2

CoInitialize的作用是什么?有他的代码么?

[复制链接]

6

主题

99

帖子

99

积分

注册会员

Rank: 2

积分
99
发表于 2007-5-15 16:49:00 | 显示全部楼层 |阅读模式
突然想,那个CoInitialize我调用过那么多了,他到底为我的程序做了些什么?一个 NULL 参数能提供什么信息给他?怎么没有他就没法使用COM?

6

主题

99

帖子

99

积分

注册会员

Rank: 2

积分
99
 楼主| 发表于 2007-5-17 13:47:00 | 显示全部楼层

Re:CoInitialize的作用是什么?有他的代码么?

居然没人回答。可能都认为是无聊的问题吧。
我还是自己找书算了。下面的见解源于《com精髓(第三版)》David S.Platt。
COM是得到windows支持的一个特殊功能,提供方便、简单的对象编程模型。(我对此表示怀疑^0^)
CoInitialize、CoInitializeEx都是windows的API,主要是告诉windows以什么方式为程序创建COM对象。
有哪些方式呢?单线程和多线程。
CoInitialize指明以单线程方式创建。
CoInitializeEx可以指定COINIT_MULTITHREADED以多线程方式创建。
创建单线程方式的COM服务器时不用考虑串行化问题,多线程COM服务器就要考虑。
在使用中,使用CoInitialize创建可使对象直接与线程连接,得到最高的性能。创建多线程对象可以直接接收所有线程的调用,不必像单线程那样需要消息排队,但却需要COM创建线程间汇集代理,这样访问效率不高。

大概就这样了,CoInitialize对windows来说可能只是设置一个标志,让下面的CoCreateInstance创建不同的线程对象罢了,同理,CoUninitialize可能只是清除标志。
由于它们是windows的API,获取它的代码嘛,想下好了,不愿深究。

上面是我翻书后的理解,难免有错误之处,还请各位高手指正。
07.5.17

3

主题

11

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2007-9-27 12:38:00 | 显示全部楼层

Re:CoInitialize的作用是什么?有他的代码么?



你在一个线程里调用了是不是?
因为你新建的线程没有初始化COM空间
就是要调用
COINITIALIZE;
UNCOINIT。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-21 04:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表