读书人

在dll函数中调用CoInitializeEx(NULL

发布时间: 2012-04-10 21:03:56 作者: rapoo

在dll函数中调用CoInitializeEx(NULL,COINIT_MULTITHREADED),然后在应用程序中调用dll函数,结束程序的时候出错
int DVD_TEXT_OCR_API DvdTextOcr(TextImage handle, char* text)
{

CoInitializeEx(NULL, COINIT_MULTITHREADED);
.....
微软OCR
CoUninitialize();
}--->dll
将此函数封装在动态库中,应用程序开一个工作线程,工作线程调用dll中的该函数
工作线程运行的时候一切正常,没有内存泄露没有内存错误,也能识别出视频图片上的字, 但是工作线程正常退出之后,销毁应用程序的时候(不销毁不出现),发生内存错误
retval = HeapFree(_crtheap, 0, pBlock);
if (retval == 0)
{
errno = _get_errno_from_oserr(GetLastError());
}
这里出现断点
当把CoInitializeEx(NULL, COINIT_MULTITHREADED)、CoUninitialize()从dll中去掉之后,在主进程中调用CoInitializeEx,但是工作线程不能识别文字,而工作线程正常退出之后,不会发生上面的错误,请问为什么?
急啊,各位帮帮忙


[解决办法]
估计是跨模块释放内存(malloc、free)造成的。
OCR代码里面是否有释放内存动作?
[解决办法]
套间问题http://www.vckbase.com/document/viewdoc/?id=1597
一个线程使用的话,用CoInitialize应该也行了

读书人网 >VC/MFC

热点推荐