15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


CFileDialog Multi-Select problem

Jeff Pek -- jpek@bizserve.com
Monday, July 29, 1996

Environment: VC++1.52c, Win95

Hi all -

I'm running into a strange problem I wonder if anyone has seen before...

I have a CFileDialog-derived class that allows the selection of more than
one file
via the OFN_ALLOWMULTISELECT flag. Excerpt of ctor:

CChooseDisplayFileDlg::CChooseDisplayFileDlg( CWnd *pParentWnd )
	: CFileDialog( TRUE, NULL, NULL, OFN_HIDEREADONLY, NULL, pParentWnd )
{
	// Set up OPENFILENAME structure information
	const size_t kFileNameBufSize = 1024;
	
	// Dialog Caption
	CString promptMsg;
	promptMsg.LoadString( IDS_SELECTDISPLAYPROMPT );
	m_ofn.lpstrTitle = new char[ promptMsg.GetLength()+1 ];
	strcpy( (char*)m_ofn.lpstrTitle, promptMsg );
	// Space for m_ofn.lpstrTitle gets deleted in dtor
	
	// Set flags
	m_ofn.Flags |= OFN_FILEMUSTEXIST;
	
	// Allow multi-file selection; need to provide a buffer
	m_ofn.Flags |= OFN_ALLOWMULTISELECT;
	m_ofn.lpstrFile = m_strFileName.GetBuffer( kFileNameBufSize );
	m_ofn.nMaxFile = kFileNameBufSize;
}

Everything is fine as long as one doesn't double click a file in the file
list box (id lst1). When this happens, a system dialog appears with the
error message "Insufficient memory to perform operation." When the dialog
box is dismissed, we go back to the OFN dialog (i.e. nothing happens). If
you select a file and then press OK, everything works fine.

Any ideas?

Thanks - Jeff Pek
jpek@bizserve.com



Jeff Pek -- jpek@bizserve.com
Tuesday, July 30, 1996

Environment: VC++ 1.52, Windows 95

Hi all -

I'm running into a strange problem I wonder if anyone has seen before...

I have a CFileDialog-derived class that allows the selection of more than
one file
via the OFN_ALLOWMULTISELECT flag. Excerpt of ctor:

CChooseDisplayFileDlg::CChooseDisplayFileDlg( CWnd *pParentWnd )
	: CFileDialog( TRUE, NULL, NULL, OFN_HIDEREADONLY, NULL, pParentWnd )
{
	// Set up OPENFILENAME structure information
	const size_t kFileNameBufSize = 1024;
	
	// Dialog Caption
	CString promptMsg;
	promptMsg.LoadString( IDS_SELECTDISPLAYPROMPT );
	m_ofn.lpstrTitle = new char[ promptMsg.GetLength()+1 ];
	strcpy( (char*)m_ofn.lpstrTitle, promptMsg );
	// Space for m_ofn.lpstrTitle gets deleted in dtor
	
	// Set flags
	m_ofn.Flags |= OFN_FILEMUSTEXIST;
	
	// Allow multi-file selection; need to provide a buffer
	m_ofn.Flags |= OFN_ALLOWMULTISELECT;
	m_ofn.lpstrFile = m_strFileName.GetBuffer( kFileNameBufSize );
	m_ofn.nMaxFile = kFileNameBufSize;
}

Everything is fine as long as one doesn't double click a file in the file
list box (id lst1). When this happens, a system dialog appears with the
error message "Insufficient memory to perform operation." When the dialog
box is dismissed, we go back to the OFN dialog (i.e. nothing happens). If
you select a file and then press OK, everything works fine.

Any ideas?

Thanks - Jeff Pek
jpek@bizserve.com




Mike Blaszczak -- mikeblas@nwlink.com
Saturday, August 03, 1996

[Mini-digest: 2 responses]

At 05:19 PM 7/29/96 -0400, you wrote:
>Environment: VC++1.52c, Win95

Thanks.  But you don't mention which memory model you're using.

> [...] Excerpt of ctor:

> [other code]
>	strcpy( (char*)m_ofn.lpstrTitle, promptMsg );
> [other code]

This is an incredibly suspicious cast.  Why do you have (char*) there?
Depending on what memory model you're using, this could mean that
you're trashing memory randomly as you run.

.B ekiM
http://www.nwlink.com/~mikeblas/
These words are my own. I do not speak on behalf of Microsoft.

-----From: Todd Brandel 

Jeff Pek wrote:
>
> Environment: VC++ 1.52, Windows 95
> ...
> Everything is fine as long as one doesn't double click a file in the file
> list box (id lst1). When this happens, a system dialog appears with the
> error message "Insufficient memory to perform operation." When the dialog
> box is dismissed, we go back to the OFN dialog (i.e. nothing happens). If
> you select a file and then press OK, everything works fine.
>
> Any ideas?
>

Jeff,

I ran into this problem a while back.  I was allocating most of the stack for
an object that should have been on the heap.  I moved the object to the heap
and everything was fine.  I don't know if the multiseltion has anything to do
with the problem, I wasn't using it.

-- 
Todd Brandel - EDS / Simucar
tdb@simucar.gmr.com
Any opinions expressed are my own.




Jeff Pek -- jpek@bizserve.com
Wednesday, August 07, 1996

> Thanks.  But you don't mention which memory model you're using.
> 
> > [...] Excerpt of ctor:
> 
> > [other code]
> >	strcpy( (char*)m_ofn.lpstrTitle, promptMsg );
> > [other code]
> 
> This is an incredibly suspicious cast.  Why do you have (char*) there?
> Depending on what memory model you're using, this could mean that
> you're trashing memory randomly as you run.

Thank you for the response, Mike.
You're right -- this does appear to be a suspicious cast.
I'm using Large Memory Model, so it amounts to simply
avoiding the constness complaint that the compiler has if one
tries to use lpstrTitle without the cast.

I don't recall if my original post included the preceding line, which
allocated lpstrTitle with new char[]. To be more correct, I probably
could have used an intermediate char *, strcpy'd into that, and then
assigned lpstrTitle to it.

Anyway, I'm pretty sure that has nothing to do with my problem.

Thanks!
Jeff




| Вернуться в корень Архива |