將從HALCON匯出的一段C++代碼(功能是實作視窗中顯示圖片),封裝成MFC的擴展DLL(相應的匯出函式為C,實作圖片顯示功能)。應用程式A加載此DLL,A中的一個函式B呼叫DLL,功能可以正常實作(圖片可以在視窗中顯示)。當B呼叫完匯出函式C后,在B中FreeLibray,應用程式A變為無回應,無法正常退出。不知道是什么原因,該如何解決。
uj5u.com熱心網友回復:
首先 MFC程式應該總是用AfxLoadLibrary/AfxLoadLibraryEx AfxFreeLibrary 消除可能的跟MFC有關的問題定位問題可以:
先嘗試把你封裝在DLL中的代碼 用一個空函式替換,
確定能正常加載卸載沒有問題之后
說明匯出的這部分代碼可能需要特別的用法(比如特定的初始化、釋放動作)
uj5u.com熱心網友回復:
感謝回復!AfxLoadLibrary/AfxLoadLibraryEx AfxFreeLibrary 等都試過了,沒有區別。
另外,我之前還做了一個不涉及到HALCON的匯出函式,DLL加載和釋放都很正常,沒有問題。
問題就在于只要一呼叫HALCON的算子,就不能正常釋放。
uj5u.com熱心網友回復:
FreeLibray 之前設定斷點,看看是否有其它執行緒是否需要先結束執行緒 或者置事件/退出標記等的要求?
uj5u.com熱心網友回復:
這個DLL沒有在執行緒中呼叫,就是直接在應用程式的主執行緒中呼叫的。設定斷點跟蹤了,FreeLibrary執行后,去呼叫了DLLMAIN函式幾次,然后,就不知道運行到哪里去了。應用程式無回應。
uj5u.com熱心網友回復:
除錯跟蹤DLL加載和卸載的程序,發現加載DLL后,一旦呼叫HALCON的算子,就會自動啟動多個執行緒。當顯示完圖片,要退出DLL中的對話框時,HALCON算子之前啟動的執行緒,并沒有全部終止,DLL的使用計數不能為0,導致DLL不能卸載。不知道哪位大蝦有在MFC DLL中封裝過HALCON的算子的經驗,是否解決過這樣的問題,還望指點一下。我用的是HALCON 12 .謝謝!
uj5u.com熱心網友回復:
那換個思路 從被封裝代碼出發,先把被封裝代碼放在主程式中運行 不走DLL 看是否能正常退出?uj5u.com熱心網友回復:
有可能需要有一些釋放資源一類的呼叫,具體要看你對halcon的熟悉了,這個沒弄過,另外如果只是要簡單顯示圖片,不如跳過這個庫,直接用系統自帶的D2D GDI+ 等轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/7435.html
標籤:圖形處理/算法
上一篇:大佬求助
