在dll函数中调用CoInitializeEx(NULL,COINIT_MULTITHREADED),然后在应用程序中调用dll函数,结束程序的时候出错

zxlovepllhaha 2012-04-01 04:46:20
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,但是工作线程不能识别文字,而工作线程正常退出之后,不会发生上面的错误,请问为什么?
急啊,各位帮帮忙
...全文
188 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxlovepllhaha 2012-04-01
  • 打赏
  • 举报
回复
引用错了。。。我原来用的是CoInitialize(0)和CoUninitialize(),出错之后我才改用CoInitializeEx(NULL, COINIT_MULTITHREADED),可是错误依旧,我去看看这个文章[Quote=引用 2 楼 的回复:]
套间问题http://www.vckbase.com/document/viewdoc/?id=1597
一个线程使用的话,用CoInitialize应该也行了
[/Quote]
zxlovepllhaha 2012-04-01
  • 打赏
  • 举报
回复
我原来用的是CoInitialize(0)和CoUninitialize(),出错之后我才改用CoInitializeEx(NULL, COINIT_MULTITHREADED),可是错误依旧,我去看看这个文章[Quote=引用 1 楼 的回复:]

估计是跨模块释放内存(malloc、free)造成的。
OCR代码里面是否有释放内存动作?
[/Quote]
zxlovepllhaha 2012-04-01
  • 打赏
  • 举报
回复
OCR里面有释放的代码,new和delete都在同一个一个模块(同一个DLL)[Quote=引用楼主 的回复:]
int DVD_TEXT_OCR_API DvdTextOcr(TextImage handle, char* text)
{

CoInitializeEx(NULL, COINIT_MULTITHREADED);
.....
微软OCR
CoUninitialize();
}--->dll
将此函数封装在动态库中,应用程序开一……
[/Quote]
fishion 2012-04-01
  • 打赏
  • 举报
回复
套间问题http://www.vckbase.com/document/viewdoc/?id=1597
一个线程使用的话,用CoInitialize应该也行了
stjay 2012-04-01
  • 打赏
  • 举报
回复
估计是跨模块释放内存(malloc、free)造成的。
OCR代码里面是否有释放内存动作?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧