以下是一段VB的code
dim obj
set obj = CreateObject("TestDll.TestClass") ' //建立了一个TestClass对象 這個對象存在于 Testdll.dll 或者test.exe 糢塊中 當然也有可能是 一個ocx什么的
obj.ReturnString() ' //接下來用這個obj來完成一些操作
' //現在開始來釋放這個obj
set obj = nothing ' //釋放它 byebye
到此為止 ,不要以為 這段VBcode與TestDll糢塊沒有關繫暸 ,實際上現在嘗試刪除這個糢塊會被提示"文件正在被使用" .
實際上 set obj=nothing 隻是讓糢塊與我們的程序與dll斷開鏈接,但是他並沒有從我們的程序內存空間中去掉映射關繫,也就是說 組件的 ExitInstance不會被調用.(這是 Visual C++.net 技術內幕的原話)
要去掉這個映射關繫需要調用 CoFreeUnusedLibraries() ,不過一個MFC程序會在空閑的時間調用CoFreeUnusedLibraries,但是ASP和 Excel就不會(估計vb的話..也不會)
不要忘暸在vb程序調用
Private Declare Sub CoFreeUnusedLibraries Lib "OLE32" ()
dim obj
set obj = CreateObject("TestDll.TestClass")
' // do some operate
Set Obj= Nothing
call CoFreeUnusedLibraries()
問題是:在一個ASP程序裏麵如何調用這個 CoFreeUnusedLibraries(),不調用這個的話,我們的DLL永遠不能釋放(不過我們也可以選擇重新啓動www服務)
期待更好的解決方法