Exemplo n.º 1
0
 private void Dispose(bool disposing)
 {
     if (disposing)
     {
         if (!_dllHandle.Equals(IntPtr.Zero))
         {
             var dllCanUnloadNowPtr = Win32NativeMethods.GetProcAddress(_dllHandle, "DllCanUnloadNow");
             if (!dllCanUnloadNowPtr.Equals(IntPtr.Zero))
             {
                 var dllCanUnloadNow = (DllCanUnloadNow)Marshal.GetDelegateForFunctionPointer(dllCanUnloadNowPtr, typeof(DllCanUnloadNow));
                 if (dllCanUnloadNow() != 0)
                 {
                     return;                         //there are still live objects returned by the dll, so we should not unload the dll
                 }
             }
             Win32NativeMethods.FreeLibrary(_dllHandle);
             _dllHandle = IntPtr.Zero;
         }
     }
 }