HALCON 导出代码封装成 MFC DLL ,调用FreeLibrary 应用程序无响应的问题

jerrywky 2020-09-09 10:52:21
将从HALCON导出的一段C++代码(功能是实现窗口中显示图片),封装成MFC的扩展DLL(相应的导出函数为C,实现图片显示功能)。应用程序A加载此DLL,A中的一个函数B调用DLL,功能可以正常实现(图片可以在窗口中显示)。当B调用完导出函数C后,在B中FreeLibray,应用程序A变为无响应,无法正常退出。不知道是什么原因,该如何解决。
...全文
724 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

你好,同样遇到这个问题,请问最后怎么解决的呢?

  • 打赏
  • 举报
回复

你好,同样遇到这个问题,请问最后怎么解决的呢?

an_bachelor 2020-09-11
  • 打赏
  • 举报
回复
引用 5 楼 jerrywky 的回复:
调试跟踪DLL加载和卸载的过程,发现加载DLL后,一旦调用HALCON的算子,就会自动启动多个线程。当显示完图片,要退出DLL中的对话框时,HALCON算子之前启动的线程,并没有全部终止,DLL的使用计数不能为0,导致DLL不能卸载。
不知道哪位大虾有在MFC DLL中封装过HALCON的算子的经验,是否解决过这样的问题,还望指点一下。我用的是HALCON 12 .谢谢!
有可能需要有一些释放资源一类的调用,具体要看你对halcon的熟悉了,这个没弄过,另外如果只是要简单显示图片,不如跳过这个库,直接用系统自带的D2D GDI+ 等
an_bachelor 2020-09-11
  • 打赏
  • 举报
回复
那换个思路 从被封装代码出发,先把被封装代码放在主程序中运行 不走DLL 看是否能正常退出?
jerrywky 2020-09-11
  • 打赏
  • 举报
回复
调试跟踪DLL加载和卸载的过程,发现加载DLL后,一旦调用HALCON的算子,就会自动启动多个线程。当显示完图片,要退出DLL中的对话框时,HALCON算子之前启动的线程,并没有全部终止,DLL的使用计数不能为0,导致DLL不能卸载。 不知道哪位大虾有在MFC DLL中封装过HALCON的算子的经验,是否解决过这样的问题,还望指点一下。我用的是HALCON 12 .谢谢!
jerrywky 2020-09-09
  • 打赏
  • 举报
回复
这个DLL没有在线程中调用,就是直接在应用程序的主线程中调用的。 设置断点跟踪了,FreeLibrary执行后,去调用了DLLMAIN函数几次,然后,就不知道运行到哪里去了。应用程序无响应。
zgl7903 2020-09-09
  • 打赏
  • 举报
回复
FreeLibray 之前设置断点,看看是否有其它线程
是否需要先结束线程 或者置事件/退出标记等的要求?

jerrywky 2020-09-09
  • 打赏
  • 举报
回复
感谢回复! AfxLoadLibrary/AfxLoadLibraryEx AfxFreeLibrary 等都试过了,没有区别。 另外,我之前还做了一个不涉及到HALCON的导出函数,DLL加载和释放都很正常,没有问题。 问题就在于只要一调用HALCON的算子,就不能正常释放。
an_bachelor 2020-09-09
  • 打赏
  • 举报
回复
首先 MFC程序应该总是用AfxLoadLibrary/AfxLoadLibraryEx AfxFreeLibrary 消除可能的跟MFC有关的问题 定位问题可以: 先尝试把你封装在DLL中的代码 用一个空函数替换, 确定能正常加载卸载没有问题之后 说明导出的这部分代码可能需要特别的用法(比如特定的初始化、释放动作)

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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