Initializes the COM library on the current apartment and identifies the concurrency model as single-thread apartment (STA). Applications must initialize the COM library before they can call COM library functions other than CoGetMalloc and memory allocation functions. 不需要翻译。
为什么必须使用CoInitialize,以及CoInitialize的作用是什么?
上文中说,要初始化COM库,那“初始化COM库”的真实含义是什么?

解决方案 »

  1.   

    CoInitialize并不装载com库,这个函数只是用来初始化当前线程使用什么样的套间。当使用这个函数以后,线程就和一个套间建立了对应关系。
    线程的套间模式决定了该线程如何调用com对象,是否需要列集等
    你可以看一下有关列集的资料,使用不同套间之间对象接口是通过列集来完成的。关于列集的实现,很多书上都有较详细的说明。
    CoInitialize()并不会干扰客户和服务之间的通信,套所作的事情只是让线程注册一个套间,而线程运行过程中就必然在此套间中,就象我们每个活着的人,都一定属于某个国家一样。
    需要强调的是,套间是com中用来解决并发调用冲突的很有效的办法
      

  2.   

    谢谢。
    可否说得详细一些?
    比如CoInitialize的实现到底有些什么东西?
    从本质上讲,使用COM组件的过程,就是“New”一个COM,Query一个接口,调用此接口的一个函数。
    那么,COM为什么必须要让这一过程置于CoInitialize和CoUninitialize之间???其实可能就像楼上所言“线程的套间模式决定了该线程如何调用com对象,是否需要列集等”其实,我想知道的的是CoInitialize和CoUninitialize里边到底是什么猫腻???
      

  3.   

    From <<Inside ATL>>, http://www.cntomorrow.com:3310/?DestUrl=ViewForumDetial.asp?ID=PKB20050204003115Before calling any COM functions, a thread needs to call CoInitialize to load the COM infrastructure (and to enter an apartment). Once a thread calls CoInitialize, the thread is free to call COM APIs.CoInitialize(0)让当前线程进入一个STA的Apartment...