Dieser FAQ Beitrag gehört eindeutig zu denen der schlechteren Kategorie!
Der strotzt nur so von Fehlern.
Hier wird eine Funktion GetModuleFileName() verwendet die einen CString zurückgibt und die ist nicht gezeigt und in der MFC gibt es die nicht.
1. GetModuleFileName liefert einen liefert einen DWORD zurück.
2. Weil dies ein DWORD ist kanst Du keinen . operator (Punkt-operator) darauf anwenden.
3. Weil es keinen Punkt.operator bei einem DWORD gibt, kann es auch kein Mid geben, genauswenig wei einen ReverseFind.
4. Macht es keinen Sinn eine Funktion zweimal aufzurufen wenn Du beim zweiten mal nichts anderes angibst als beim ersten mal.
5. Wird in C/C++ relativ zu 0 gezählt. CString::Mid(1,...) würde also das erste Zeichen abschneiden. (auch ein Fehler in diesem FAQ Beitrag)
Hier drei korrekte Varianten (allerdings nicht getestet und einfach so frei hingeschrieben). Variante 1 würde ich bevorzugen.
Variante 1 kommt aus http://www.mpdvc.de/html.htm#Q13 (BTW: DiesenFAQ Beitrag habe ich vor gefühlten 20 Jahren geschrieben).
CString GetApplicationDirectory()
{
TCHAR szPathName[_MAX_PATH];
::GetModuleFileName(NULL, szPathName, _MAX_PATH);
LPTSTR pszFileName = _tcsrchr(szPathName, '\\') + 1;
*pszFileName = '\0';
return szPathName;
}
CString GetApplicationDirectory()
{
CString strPath;
::GetModuleFileName(NULL, CStrBuf(strPath,_MAX_PATH), _MAX_PATH);
strPath.GetBufferSetLength(strPath.ReverseFind('\\')-1);
return szPath;
}
CString GetApplicationDirectory()
{
CString strPath;
::GetModuleFileName(NULL, CStrBuf(strPath,_MAX_PATH), _MAX_PATH);
return strPath.Mid(0,(strPath.ReverseFind('\\')-1);
}