COM 初始化
来源:互联网 发布:中国cms哪个好 编辑:程序博客网 时间:2024/05/14 15:37
COM 初始化,说简单很简单,说复杂,有些时候还真不简单。
首先,CoInitialize(NULL)和CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);是一样的。我们尽可能使用CoInitializeEx来初始化COM比较好。
STA套间
调用CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);,那么COM系统就会为calling thread创建一个单线程套间。
如果再调用一次CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);那么CoInitializeEx()还是会成功,但是返回一个S_FALSE。也就是说多次初始化COM是可以的。
但是如果在初始化成单线程套间后,再去尝试初始化多线程套间,那就会失败,返回值会提示“不可以修改套间类型”啥的。
每一次成功的CoInitializeEx都最后有一个对应的CoUninitialize(),这样就比较优雅。当然如果不CoUninitialize,通常问题也不大。
一个进程里面可以有多个STA套间,每个STA套间有且仅有一个线程。一个STA套间里面可以有多个STA对象。
MTA套间
使用CoInitializeEx(NULL, COINIT_MULTITHREADED);来创建一个MTA套间。一个进程里面只能有一个MTA套间。
比如我们在主线程里面创建了MTA套间,那么主线程就属于MTA套间。所有其他辅助线程,如果自己没有初始化COM,那么默认就属于MTA套间。
如果辅助线程自己初始化COM,就看情况而定。总体来说,当主线程初始化成MTA后,辅助线程有三种情况:
1. 辅助线程不初始化COM,那么就默认属于MTA套间
2. 辅助线程初始化成MTA套间,那么还是属于MTA套间
3. 辅助线程初始化成STA套间,那么辅助线程就属于STA套间。
一个进程只有1个MTA套间,但是可以有多个STA套间。每个MTA套间里面可以有多个线程。
- com初始化
- COM 初始化
- COM库初始化
- COM 初始化的问题
- 初始化COM组件
- com组件初始化
- 初始化com环境
- COM组件初始化
- 初始化COM组件
- COM组件初始化
- com的初始化
- COM组件初始化
- COM组件初始化
- VC初始化COM
- COM组件的初始化
- ADO连接失败,Com初始化
- 初始化COM时候的问题
- C++ COM学习笔记(一)浅谈COM初始化
- Tomcat Server.xml配置文件
- 博弈论专题
- Handler
- JDK, JRE 和JVM的区别
- Mac下使用Cocos2d-x Lua 3.2读取Cocos Studio 1.0beta导出的Json
- COM 初始化
- 队的创建,出队,入队,遍历等操作
- 有关webview缓存问题
- 【LeetCode题目记录-8】从排序后的单链表中去除重复元素
- 【黑马程序员】黑马入学准备篇:网络编程之 TCP、UDP和Socket综合实例
- Redis常用命令
- android 网络测速 绘图类
- 数字 string 转换
- Hibernate读书笔记-----懒加载分析