我有一箇舊的VB6項目,我打電話給我創建的.Net庫。 我仍然在這個DLL的單元測試階段,所以問題是,每次我更新我的DLL,並讓運行的VB6應用程序識別它,我不得不關閉應用程序來替換舊的DLL版本新的一個。所以我認爲dll在第一次調用時被加載到內存中,直到我退出應用程序調用它纔會被釋放。 反正有沒有從VB6應用程序中釋放DLL?如何從內存中釋放在VB6應用程序中調用的.Net DLL?
1
A
回答
5
COM支持卸載不再使用的服務器。基礎API調用是服務器中的CoFreeUnusedLibraries()和DllCanUnloadNow()入口點,由COM基礎結構自動調用。發生這種情況的確切時間通常是不可預知的,如果您想根據需要替換DLL,應該已經成爲掛斷。
但是這對[ComVisible] .NET程序集不起作用。由CLR施加的限制,.NET程序集只能在AppDomain被銷燬時卸載。第一次從.NET程序集創建對象時創建。在程序退出之前,AppDomain不會被銷燬,從而保持對DLL的鎖定。
這是技術上無論如何可能發生這種情況,您必須在一個程序集中公開一個墊片類,以將調用轉發給在另一個程序集中實現的另一個類。你加載到另一個AppDomain中。相當痛苦,因爲需要的appdomain邊界編組而緩慢。一個重要的掛斷是你不能得到一個很好的信號來銷燬該AppDomain。您必須使用您公開的客戶端代碼可以調用的方法來明確它。一個進程外服務器將是另一種方法,在.NET中也很慢並且很痛苦,它需要COM +託管ServicedComponent類。很多理由不是想要這個。
相關問題
- 1. 如何在VB6應用程序中調用.NET創建的DLL?
- 2. 從內存中釋放UIWebView內容,強制應用程序釋放內存
- 3. 如何從.NET中使用VB6 DLL?
- 4. 在VB6應用程序中使用.NET dll
- 5. 如何在iPhone應用程序中可靠地釋放內存?
- 6. 在vb6中使用.net dll
- 7. VB6應用程序調用.NET DLL OutOfMemory異常
- 8. 如何在.NET中釋放內存?
- 9. 如何釋放GUI應用程序中分配的內存?
- 10. 比較.Net和VB6應用程序的內存佔用情況
- 11. 從.NET DLL調用VB6方法
- 12. 如何加速從VB6調用的.NET組件的'冷啓動'應用程序
- 13. 如何從Visual Studio調試器中釋放應用程序?
- 14. 如何釋放其他應用程序佔用的內存?
- 15. 如何在註銷應用程序時釋放內存?
- 16. DLL文件應放置在.NET Web應用程序中
- 17. 在.net中的vb6 DLL REGDB_E_CLASSNOTREG
- 18. 如何強制通用應用程序釋放內存?
- 19. VB6調用C#不釋放
- 20. 如何從.NET的DLL中反思主應用程序?
- 21. 從VB6調用.net類的Webservice調用
- 22. 如何從dll訪問調用應用程序中的變量?
- 23. Tcl - 在程序中間釋放內存
- 24. 如何保護導入的Win32 DLL從內存問題到.NET應用程序
- 25. removeFromParentNode不釋放ARKit中的內存應用程序
- 26. 應用程序越來越stucked以釋放android中的內存:
- 27. c#.net COM dll打破引用vb6應用程序
- 28. 使用.net dll中的Microsoft企業庫從COM應用程序中調用
- 29. 如何從vb6調用本機C DLL
- 30. 在c#.net中使用VB6 dll
部署總是很有趣; VB6不*具有在進程內隔離的好功能(對比:.NET中的'AppDomain');我看不到這個工作... – 2014-09-03 08:39:47
你可能會浪費數週試圖讓這個工作。只需關閉應用程序並重新啓動它。 – MarkJ 2014-09-03 11:01:13