Sign in to follow this  
Koobazaur

Win32: GetSaveFileName doesn't like fstream?

Recommended Posts

Here's a tid bit of a code from my program that is executed on WM_LBUTTONUP:
bool SaveProfile(HWND hwnd)
{    
 OPENFILENAME SaveInfo;
 //fstream File;
 int No=ImageInfo.GetNumber(); 
 char Filename[256]; 
 char szFilter[256];
 
 //create the filter for the file
 strcat(szFilter, "Profile (*.mrp) ");
 strcat(szFilter, "*.mrp");
 szFilter[15]='\0';  
 szFilter[22]='\0';
 szFilter[23]='\0'; 

 //reset filename
 Filename[0]='\0';
 
 SaveInfo.lStructSize = sizeof(OPENFILENAME); 
 SaveInfo.hwndOwner = hwnd; 
 SaveInfo.lpstrFilter = szFilter; 
 SaveInfo.lpstrCustomFilter = NULL;
 SaveInfo.nFilterIndex = 0;
 SaveInfo.lpstrFile= Filename; 
 SaveInfo.nMaxFile = 100; 
 SaveInfo.lpstrFileTitle = NULL; 
 SaveInfo.nMaxFileTitle = 0; 
 SaveInfo.lpstrInitialDir = NULL; 
 SaveInfo.Flags = OFN_OVERWRITEPROMPT; 
 SaveInfo.lpstrTitle = NULL;

 GetSaveFileName(&SaveInfo);

 return 1;   
}


It compiles fine and works. Now, see that //fstream File; on the top? If I unqoute it (this declaring an fstream variable there), the program crashes whenever it gets to GetSaveFileName(&SaveInfo) giving the "there was a problem with this application and it will be closed. We are sorry for the inconvenice." Can anyone explain to me why this is happening? Another odd thing is, if I put my Display function (draw a bunch of stuff to the screen) just before calling this one, it will not crash at all... I am really confused right now :/

Share this post


Link to post
Share on other sites
The thing that jumps out at me is that you are strcat'ing into szFilter without initializing it first. strcat depends there already being a valid string in place.

Edit: Also your filter string is just plain wrong. It should look like

"Profile\0*.mrp\0\0"

Share this post


Link to post
Share on other sites
Alright, I seem to have fixed the problem by copying the exact thing they have in MSDN for opening files. Here's what it looks like, just fyi:


bool SaveProfile(HWND hwnd)
{
OPENFILENAME SaveInfo;
char Filename[256];

//reset filename
Filename[0]='\0';

ZeroMemory(&SaveInfo, sizeof(SaveInfo));
SaveInfo.lStructSize = sizeof(SaveInfo);
SaveInfo.hwndOwner = hwnd;
SaveInfo.lpstrFile = Filename;
SaveInfo.nMaxFile = sizeof(Filename);
SaveInfo.lpstrFilter = "Profile\0*.mrp\0\0";
SaveInfo.nFilterIndex = 1;
SaveInfo.lpstrFileTitle = NULL;
SaveInfo.nMaxFileTitle = 0;
SaveInfo.lpstrInitialDir = NULL;
SaveInfo.Flags = OFN_OVERWRITEPROMPT;

GetSaveFileName(&SaveInfo);


return 1;
}



Why did it do such bizzarre things beforehand is beyond me...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this