GetSaveFileName fejler med errorcode CDERR_MEMLOCKFAILURE
Hej!Ja, titlen siger vel det meste. Altså, jeg vil åbne en common dialog save box, og inden det initialiserer jeg OPENFILENAME struct'en. Jeg programmerer i C, bruger WinAPI, og compiler i .NET (hvis det er relevant).
Nå, her er koden:
BOOL CALLBACK DlgOptions(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
char logFileName[500];
OPENFILENAME logFile;
logFile.lStructSize = sizeof(OPENFILENAME);
logFile.hwndOwner = hwnd;
logFile.lpstrFilter = NULL;
logFile.lpstrCustomFilter = NULL;
logFile.nFilterIndex = 1;
logFile.lpstrFile = logFileName;
logFile.lpstrFileTitle = NULL;
logFile.lpstrInitialDir = NULL;
logFile.lpstrTitle = "What to save the log file as?";
logFile.Flags = OFN_CREATEPROMPT |OFN_HIDEREADONLY |OFN_NOREADONLYRETURN |OFN_OVERWRITEPROMPT |OFN_PATHMUSTEXIST;
logFile.lpstrDefExt = "txt";
switch(Message)
{
case WM_INITDIALOG:
return TRUE;
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_OPTIONS_FILESAVEAS:
GetSaveFileName(&logFile);
switch( CommDlgExtendedError() )
{
case CDERR_MEMALLOCFAILURE:
MessageBox(NULL, TEXT("CDERR_MEMALLOCFAILURE"), "Fail", MB_OK | MB_ICONEXCLAMATION);
break;
}
break;
}
break;
case WM_CLOSE:
EndDialog(hwnd,0);
break;
default:
return FALSE;
}
return TRUE;
}
Det er med vilje at jeg kun har en case på CDERR_MEMLOCKFAILURE når jeg switch'er på CommDlgExtendedError(). Jeg har prøvet at switch'e på alle de mulige fejlkoder som den kan finde på at retunerer, og derved fundet ud af at det er CDERR_MEMOCKFAILURE, som er fejlen. Så vidt, så godt. Derefter gik jeg ind på msdn, og læste, at CDERR_MEMLOCKFAILURE returneres når:
"The common dialog box function was unable to lock the memory associated with a handle."
OK, men hvordan løser jeg så problemet? Hvad skal der gøres for at kunne "låse hukommelsen"?
Håber det giver mening? Ellers må jeg prøve at forklare mig bedre :)
Hilsen Jesper