在线程里可以初始化COM库(CoInitialize)吗?

时间:2021-09-20 17:25:41
Platfrom: win2003
Database: mdb (ADO)
Program: NT 服务程序

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

11 个解决方案

#1


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

#2


可以

#3


可以的,有益无害.

#4


如果你用了COM

就必须初始化

#5


每个线程都必须....

#6


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

#7


Hi All:

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

#8


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

#9


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

#10


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

#11


你换成sql试试

#1


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

#2


可以

#3


可以的,有益无害.

#4


如果你用了COM

就必须初始化

#5


每个线程都必须....

#6


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

#7


Hi All:

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

#8


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

#9


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

#10


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

#11


你换成sql试试