Warum verbraucht GetOpenFileName so viel Speicher? (...)
-
Hi,
(...) Und kann man den Speicher nach der Benutzung nicht irgendwie wieder freigeben? Ich habe es sogar mit der Verwendung des Heaps versucht (mehr oder weniger erfolgreich) und trotzdem bleibt das Programm in Hinsicht auf den Speicher'verbrauch' riesig. BITTE UM HILFE

#include <windows.h> #include <iostream> using namespace std; typedef BOOL (*tGetOpenFileName) (LPOPENFILENAME lpofn); int main(int argc, char *argv[]) { OPENFILENAME *pOpenFileName = new OPENFILENAME; char *pFilePathDllBuffer = new char[MAX_PATH]; HMODULE *pComDlg32 = new HMODULE; tGetOpenFileName pGetOpenFileName; cout << "<START>" << endl; // ca 400K cin.get(); ZeroMemory(pOpenFileName, sizeof(OPENFILENAME)); pOpenFileName->lStructSize = sizeof(OPENFILENAME); pOpenFileName->hwndOwner = NULL; pOpenFileName->lpstrFile = pFilePathDllBuffer; pOpenFileName->lpstrFile[0] = '\0'; pOpenFileName->nMaxFile = MAX_PATH; pOpenFileName->lpstrFilter = "All\0*.*\0Dynamic Link Library\0*.dll\0\0"; pOpenFileName->nFilterIndex = 1; pOpenFileName->Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; cout << "<VOR GETOPENFILENAME>" << endl; // ca 400K cin.get(); if(*pComDlg32 = LoadLibrary("comdlg32.dll")) if(!(pGetOpenFileName = (tGetOpenFileName) GetProcAddress(*pComDlg32, "GetOpenFileNameA"))) return EXIT_FAILURE; pGetOpenFileName(pOpenFileName); cout << "<VOR FREELIBRARY>" << endl; // ca 6.000K cin.get(); FreeLibrary(*pComDlg32); cout << "<VOR DELETE>" << endl; // ca 6.000K (Warum immer noch soviel???) cin.get(); delete pOpenFileName; delete[] pFilePathDllBuffer; delete pComDlg32; cout << "<ENDE>" << endl; // ca 6.000K cin.get(); return EXIT_SUCCESS; }
-
Diese Methode lädt vermutlich indirekt sehr viele DLLs
u.a. alle Shell-Extensions... schau doch mal in den Debug-Output, wenn Du diese Funktion aufrufst; dann siehst Du was alles plötzlich geladen wird.Dagegen tun kannst Du nix

-
Oh, ja, da wird wirklich einiges eingeladen. Da gibt es wirklich keine Alternativen? Und auch keine Möglichkeit das, was alles eingeladen wird, wieder zu entladen (natürlich nach der Benutzung der Funktion)?
-
Vielleicht ja GetModuleHandle + FreeLibrary?
-
DerDieter schrieb:
Oh, ja, da wird wirklich einiges eingeladen. Da gibt es wirklich keine Alternativen? Und auch keine Möglichkeit das, was alles eingeladen wird, wieder zu entladen (natürlich nach der Benutzung der Funktion)?
Nein. Mir ist keine Möglichkeit bekannt wie dies gehen sollte...