Unload statycznej biblioteki Dll z aplikacji

0

VS 2010, C#

Mam bibliotekę DLL z metodami COM dodaną do resources w projekcie. Czyli dodana statycznie a nie dynamicznie.
Jeśli powołam obiekt klasy tej DLL, to później już nie da się zwolnić z pamięci aplikacji tej DLL, dopóki nie zamknie się całkiem aplikacji.

Jest jakiś sposób aby wymusić UNLOAD tej DLL z aplikacji aż do ponownego powołania nowego obiektu tej klasy?

1

Jeżeli jest biblioteka ładowana statycznie, to wydaje się niemożliwym jej wyładowanie i załadowanie jeszcze raz, bo wtedy byłaby biblioteką ładowaną dynamicznie ;P. Nie będę jednak się upierał ;)

0

Przerobiłem aplikację na dynamiczne ładowanie biblioteki:

 
Guid g = new Guid("XXXXXX-XX-XXX-...");

Type typCom = Type.GetTypeFromCLSID(g);
object objCom = Activator.CreateInstance(typCom);
try
{
....
}
finally
{
    Marshal.ReleaseComObject(objCom);
    objCom = null;
    typCom = null;
    GC.Collect();
    GC.WaitForPendingFinalizers();
}

I nadal nie zwalnia się ta cholerna biblioteka dll z pamięci programu.

Jak to prawidłowo obsłużyć? W Google szukałem i nic działającego nie znalazłem :(

1

Temat do zamknięcia.

Rozwiązanie: http://www.pinvoke.net/default.aspx/ole32.cofreeunusedlibraries

[DllImport("ole32.dll")]
static extern void CoFreeUnusedLibraries(); 

...

CoFreeUnusedLibraries();

1 użytkowników online, w tym zalogowanych: 0, gości: 1