Click here to Skip to main content
12,947,643 members (61,613 online)
Rate this:
Please Sign up or sign in to vote.
Hello! I have a problem with the following code, it gives me an error to CFileDialog part:

error C2664: 'CFileDialog::CFileDialog(BOOL,LPCTSTR,LPCTSTR,DWORD,LPCTSTR,CWnd *,DWORD,BOOL)' : cannot convert parameter 2 from 'const char [5]' to 'LPCTSTR'

void CROSH1Dlg::OnBnClickedSave()
	CStudentGrade StdGrades;
	if( this->m_StudentName == "" )
	//strcpy (StdGrades.StudentName, this->m_StudentName);
	StdGrades.StudentName = this->m_StudentName;
	StdGrades.SchoolYear1 = this->m_SchoolYear1;
	StdGrades.SchoolYear2 = this->m_SchoolYear2;
	StdGrades.English     = this->m_English;
	StdGrades.History     = this->m_History;
	StdGrades.Economics   = this->m_Economics;
	StdGrades.Language2   = this->m_2ndLanguage;
	StdGrades.Geography   = this->m_Geography;
	StdGrades.Arts        = this->m_Arts;
	StdGrades.Math        = this->m_Math;
	StdGrades.Science     = this->m_Science;
	StdGrades.PhysEduc    = this->m_PhysEduc;
	StdGrades.Total       = this->m_Total;
	StdGrades.Average     = this->m_Average;
	CString strFilename = this->m_StudentName;
	CFile fleGrades;
	char strFilter[] = { "Student Grades (*.dnt)|*dnt|All Files (*.*)|*.*||" };
	CFileDialog dlgFile(FALSE, ".dnt", strFilename, 0, strFilter);
	if( dlgFile.DoModal() == IDOK )
		// Save the record in binary format
		ofstream stmGrades(dlgFile.GetFileName(), ios::binary);
		stmGrades.write((char *)&StdGrades, sizeof(StdGrades));
		// Reset the dialog box in case the user wants to enter another record
		m_StudentName = "";
		m_SchoolYear1 = 2000;
		m_SchoolYear2 = 2001;
		m_English     = 0.00;
		m_History     = 0.00;
		m_Economics   = 0.00;
		m_2ndLanguage = 0.00;
		m_Geography   = 0.00;
		m_Arts        = 0.00;
		m_Math        = 0.00;
		m_Science     = 0.00;
		m_PhysEduc    = 0.00;
		m_Total       = 0.00;
		m_Average     = 0.00;
Posted 17-Apr-11 6:16am
Rate this: bad
Please Sign up or sign in to vote.

Solution 2

When you are using strings use them like this
_T("Your String..")
So to solve your problem use this code
CFileDialog dlgFile(FALSE,_T(".dnt"), strFilename, 0, strFilter);

and use..
TCHAR strFilter[] = _T("Student Grades (*.dnt)|*dnt|All Files (*.*)|*.*||" );
Hans Dietrich 17-Apr-11 12:49pm
The OP didn't say he got an error on this line:
if( this->m_StudentName == "" )
so he must not be using Unicode.
mr.abzadeh 17-Apr-11 14:20pm
I think he uses unicode and solution 2 is True.
for m_StudentName to be unicode, It must be declared as
_TCHAR m_StudentName[some number];
wchar_t m_StudentName[some number];
Hans Dietrich 17-Apr-11 22:48pm
If that's true, then why didn't OP report an error on that line?
mr.abzadeh 18-Apr-11 9:04am
StudentName is declared as
char m_StudentName[some number];
This declares m_StudentName as MBCS, even if using unicode chars, and The instruction
if( this->m_StudentName == "" )
compares two char pointers
Rate this: bad
Please Sign up or sign in to vote.

Solution 1

Try this:
CString strDefExt = ".dnt";
CFileDialog dlgFile(FALSE, strDefExt, strFilename, 0, strFilter);
Rate this: bad
Please Sign up or sign in to vote.

Solution 3

It's working, thank you for your help, however I have another problem with the open button, two errors:

error C2664: 'void ATL::CStringT<basetype,stringtraits>::Format(const wchar_t *,...)' : cannot convert parameter 1 from 'const char [12]' to 'const wchar_t *'

caption.Format("Student: %s", name);

error C2664: 'void ATL::CStringT<basetype,stringtraits>::Format(const wchar_t *,...)' : cannot convert parameter 1 from 'const char [3]' to 'const wchar_t *'

this->m_StudentName.Format("%s", name);

Full code here, I try to make a open button:

void CROSH1Dlg::OnBnClickedOpen()
	CStudentGrade StdGrades;
	CFile fleGrades;
	//TCHAR strFilter[] = _T("Student Grades (*.dnt)|*dnt|All Files (*.*)|*.*||" );
	//CFileDialog dlgFile(FALSE,_T(".dnt"), strFilename, 0, strFilter);
	TCHAR strFilter[] = _T("Student Grades (*.dnt)|*dnt|All Files (*.*)|*.*||");
	CFileDialog dlgFile (TRUE,_T(".dnt"), NULL, 0, strFilter);
	if( dlgFile.DoModal() == IDOK )
		// Open a record in binary format
		ifstream stmGrades(dlgFile.GetFileName(), ios::binary); *)&StdGrades, sizeof(StdGrades));
		// Change the caption of the dialog box to reflect the current grade
		char name[40];
		//strcpy(name, StdGrades.StudentName);
		CString caption;
		caption.Format("Student: %s", name);
		// Display the record in the dialog box
		this->m_StudentName.Format("%s", name);
		this->m_SchoolYear1 = StdGrades.SchoolYear1;
		this->m_SchoolYear2 = StdGrades.SchoolYear2;
		this->m_English     = StdGrades.English;
		this->m_History     = StdGrades.History;
		this->m_Economics   = StdGrades.Economics;
		this->m_2ndLanguage = StdGrades.Language2;
		this->m_Geography   = StdGrades.Geography;
		this->m_Arts        = StdGrades.Arts;
		this->m_Math        = StdGrades.Math;
		this->m_Science     = StdGrades.Science;
		this->m_PhysEduc    = StdGrades.PhysEduc;
		this->m_Total       = StdGrades.Total;
		this->m_Average     = StdGrades.Average;

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

    Print Answers RSS
Top Experts
Last 24hrsThis month
OriginalGriff 5,134
CHill60 3,275
Maciej Los 2,563
Jochen Arndt 1,935
ppolymorphe 1,795

Advertise | Privacy | Mobile
Web01 | 2.8.170518.1 | Last Updated 17 Apr 2011
Copyright © CodeProject, 1999-2017
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100