Piszę w C++ Builder 2009. Stworzyłem czystą bibliotekę bez żadnych funkcji
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
return 1;
}
Skompilowałem, wrzuciłem do katalogu z aplikacją, kliknięcie buttona powoduje tylko wczytanie i zwolnienie biblioteki, nic poza tym, kliknięcie buttona to tylko te dwie poniższe linie
HINSTANCE DLLHandle = LoadLibrary("DL0001.dll");
FreeLibrary(DLLHandle);
Ładuję bibliotekę, potem ją zwalniam. Po zwolnieniu biblioteki za każdym razem w RAM pozostają jakieś śmieci w wielkości około 300kB. Każde kliknięcie buttona powoduje zwiększenie zużycia RAM-u przez aplikację o kolejne 300 kB.
Teraz gdy z katalogu systemowego "system32" skopiuję dowolną bibliotekę, zmieniam jej nazwę (by aplikacja korzystała z tej która jest w katalogu aplikacji a nie z katalogu systemowego) i ładuję jak poprzednią "DL0001.dll" potem usuwam poprzez polecenie FreeLibrary, biblioteka jest w 100 % usuwana z RAM-u.
Śmieci w RAM-ie pozostają tylko po bibliotekach stworzonych przeze mnie poprzez Buildera.
Biblioteka nie powinna pozostawiać w RAM żadnych śmieci po sobie, niestety jednak jest inaczej. Tym bardziej czysta biblioteka, która nie zawiera żadnych funkcji i nie tworzy żadnych zmiennych.
Czy ktoś może mi pomóc w rozwiązaniu tego problemu ?