CoInitlize使用

参考:http://blog.csdn.net/ooyyee11/article/details/7444610

编写了一个播放音频的小程序,但有时无法重新播放,莫名其妙,后来发现调用接口失败,提示组件没有初始化。查了好久,才发下,CoInitlize是单线程的,而我播放声音是通过Socket通信线程接收外部命令,来控制播放。

Coinitialize  参数为保留参数,必须为NULL

CoInitialize是 Windows提供的API函数,用来告诉 Windows以单线程的方式创建com对象。应用程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。  

返回值S_OK : 该线程中COM库初始化成功S_FALSE 该线程中COM库已经被初始化 CoInitialize () 标明以单线程方式创建。  使用 CoInitialize 创建可以使对象直接与线程连接,得到最高的性能。  

CoInitialize并不装载COM 库,它只用来初始化当前线程使用什么样的套间。使用这个函数后,线程就和一个套间建立了对应关系。线程的套间模式决定了该线程如何调用COM对象,是否需要列集等。  

CoInitialize ()并不会干扰客户和服务器之间的通信,它所做的事情是让线程注册一个套间,而线程运行过程中必然在此套间。   CoInitialize和CoUninitialize必须成对使用

在每个线程函数里,如果要使用COM对象就需要调用CoInitialize或CoInitializeEX 在线程退出的时候释放. 当然如果你的线程不需要COM对象,就没必调用.

COM(ComponentObjectModel,组件对象模型) 在Windows操作平台下,众多以COM形式提供的组件模块,如DirectX多媒体软件包、OLEDB/ADO数据库组件系统等,极大地丰富了操作系统的功能。由于COM机制允许任意两组件之间相互通信而不必关心是在何种计算机上的何种操作系统下运行,也不用关心组件是使用何种语言编制的,这使COM技术拥有了强大的生命力。尤其是Windows2000同COM的下一代产品COM+的结合更加紧密,将使COM/COM+技术得到更广泛的应用

原文地址:https://www.cnblogs.com/yuanxingdefan/p/2792962.html