[心得]一个值得注意的问题-----CoInitialize(NULL)
这天做了一个多线程的程序,在非MAIN的线程里采用ADO方式调用数据库,大家都很熟悉:不就是要加几个申明吗,#import ".\msado15.dll" no_namespace rename( "EOF", "adoEOF" )
、CoInitialize(NULL)、CoUninitialize(); 马上就可以使用了,不是吗??
可巧了,我遇到的麻烦是这样的:
测试的时候:
main()
{...
CoInitialize(NULL);
call adoprocess()....//测试时,直接调用没问题
CoUninitialize();
....
}
UINT ADOPROCESS(LPVOID parm)//辅助线程
{
adoprocess().....//程序运行的时候,非主动的触发,结果出错!!!
}
忙了半天,查找出了原因:
CoInitialize(NULL);
之类的申明只对当前线程有效!!!
改了以后,就没有问题了。
UINT ADOPROCESS(LPVOID parm)//辅助线程
{
CoInitialize(NULL);
adoprocess().... //这样是对的
CoUninitialize();
}
说出来就是希望大家不要再犯同类的错误,千万不要想当然。