Probleme mit GetSpecialPath

hury

Erfahrenes Mitglied
Hallo zusammen,

ich musste mein Projekt von VC++ 9.0 Express Edition auf Visual Studio 2005 Professional umsteigen (kostenlose Version von MSDNAA). Nun funktioniert aber mein Projekt nicht mehr, was vorher lief.

Dieser Aufruf verursacht den Fehler:

Code:
	GetSpecialPath(CSIDL_DESKTOPDIRECTORY, path);

Hier die Methode:

Code:
BOOL GetSpecialPath(int folderID, LPTSTR lpszPath)
{
	LPITEMIDLIST pidl;
	if(SHGetSpecialFolderLocation(NULL, folderID, &pidl) != NOERROR)
		return FALSE;
	if(!SHGetPathFromIDList(pidl, lpszPath))
		return FALSE;
	return TRUE;
}

Und hier der Fehler:
Code:
error C2664: 'GetSpecialPath': Konvertierung des Parameters 2 von 'CHAR [260]' in 'LPTSTR' nicht möglich
        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

Hat jemand eine Idee woran es liegt?

Gruß
Alex
 
schau mal hier: http://www.hackerboard.de/thread.php?threadid=24832&sid=

vielleicht hiflt dir dort der beitrag von "nidda" weiter...

ach und:

http://forum.chip.de/c-c/lptstr-deklarieren-599109.html hat gesagt.:
LPTSTR ist (wenn UNICODE defined) ein LPWSTR ansonsten ein LPSTR.
Ein LPSTR ist ein CHAR* der auf einen (modifzierbaren,narrow ) C-Style String zeigt.
Ein LPWSTR ist ein WCHAR* der auf einen (modifizierbaren, wide) C-Style String zeigt

demnach ist LPTSTR ein zeiger auf ein TCHAR Array, das als C-Style String ( modifizierbar ) interpretiert wird.

i.d.R hat man das bei API - Funktionen die in einer ANSI und in einer UNICODE Version existieren denen man einen genügend grossen TCHAR Buffer übergeben muss, in den dann ein String geschrieben wird. z.B.

DWORD GetTempPath(
DWORD nBufferLength,
LPTSTR lpBuffer
);

->

TCHAR buf[...];
GetTempPath( ..., buf);

wenn man das dann mit UNICODE defined kompiliert, wird es ungefähr zu

wchar_t buf[...];
GetTempPathW(...);

und ohne UNICODE zu

char buf[...];
GetTempPathA(...);

Ausserdem deutet die Fehlermeldung auf die ungleichheit 2er typen bei der übergabe an die funktion hin.
 
Zuletzt bearbeitet:
Hi,

hab´s so gelöst:
Code:
GetSpecialPath(CSIDL_DESKTOPDIRECTORY, (LPTSTR)path);

Gruß
Alex
 
Nein, das ist keine Lösung!

C++:
const bool GetSpecialPath(const int folder_identification, const char* path)
{
	::LPITEMIDLIST pidl;
	return ::SHGetSpecialFolderLocation(NULL, folder_identification, &pidl) == NOERROR && ::SHGetPathFromIDListA(pidl, path);
}
 
Du hast Recht, so hatte es doch nicht funktioniert.
Leider geht Deine Lösung auchj nicht:

Code:
c:\dokumente und einstellungen\filth.alex\eigene dateien\visual studio 2005\projects\my3ddesk\my3ddesk\icongetter.cpp(29) : error C2664: 'SHGetPathFromIDListA': Konvertierung des Parameters 2 von 'const char *' in 'LPSTR' nicht möglich
 
Hmm ja war klar :P
C++:
const bool GetSpecialPath(const int folder_identification, char* path)
{
     ::LPITEMIDLIST pidl;
     return ::SHGetSpecialFolderLocation(NULL, folder_identification, &pidl) == NOERROR && ::SHGetPathFromIDListA(pidl, path);
}
 
cool, eig ne ziemlich nützliche Funktion...

habs mal grad ausprobiert....welchen header muss ich denn einbinden?
 
Zuletzt bearbeitet:
Zurück