Platfrom: win2003
Database: mdb (ADO)
Program: NT 服务程序笔者做了一个小程序,当程序运行时,它将创建几个线程,这些线程会用ADO操作数据库.发现:
1.如果在线程里进行初始化COM库(CoInitialize)的工作,那么_ConnectionPtr->Open()将失败,提示说"无效指针".
2.如果在进程(主线程)中创建,则会成功.
问题:
这是不是一个,一个规则:在线程里不可以初始化COM库(CoInitialize);还是我的方法有问题.请各位大虾知无不言.

解决方案 »

  1.   

    印象中每一个线程都要CoInitialize,具体记不得了,建议看帮助吧。
      

  2.   

    每个线程都必须CoInitialize,不同线程的interface禁止混用,即interface只能在初始化它的线程内使用
      

  3.   

    Hi All:     我的编程结果的结论是:只需在进程中CoInitialize就得了.想来,这也符合,线程共享其父进程的资源.
         问题是: 如果在线程里进行CoInitialize就不行,我会再仔细检查一下我的代码.力求把这个问题搞清楚. 谢谢大家的发言.
      

  4.   

    很简单,在一个线程上调用CoIntalize(),而在另一线程上使用COM,这样做是无效的!你必须在使用Com的线程上调用CoIntalize()和CoUnitalize()
      

  5.   

    每个线程单独CoInitialize,单独初始化
      

  6.   

    将CoInitialize改为CoInitializeEx(Null, Mu....)多线程套间。