Richtige Verwendung von "SHGetSpecialFolderPath"



  • Hallo,

    mein Fachgebiet ist eigentlich C#, aber ich möchte nun eine Anwendung in "natives" C++ umschreiben.
    Ich komme momentan bei der Verwendung der API-Methode "SHGetSpecialFolderPath" nicht weiter, mit der ich das Verzeichnis für Eigene Bilder ermitteln will:

    //bla.cpp
    #include <iostream>
    #include <shlobj.h>
    
    using namespace std;
    
    int main()
    {
       char myPics[MAX_PATH];
       SHGetSpecialFolderPath(NULL, myPics, CSIDL_MYPICTURES, FALSE);
       cout << myPics << endl;
    
       cin.get();
       return 0;
    }
    

    Das Problem ist, dass meine IDE (Code::Blocks 8.x mit MinGW) mir meldet, "SHGetSpecialFolderPath" sei nicht deklariert.
    Ich weiß nicht, was ich alles einbinden und deklarieren muss, um eine API Methode anzuwenden und finde auch keine Infos dazu.
    Kann mir jemand weiterhelfen?

    mfg vredezbyrD

    //EDIT: Ich benutze Windows 7 64-Bit



  • http://msdn.microsoft.com/en-us/library/bb762204(VS.85).aspx

    Hast Du die benötigte Library (Shell32.lib) in Dein Projekt eingebunden?



  • Ja, hab mir erst das Windows SDK gezogen und dann die Lib eingebunden (Linkereinstellungen).



  • vredezbyrD schrieb:

    int main()

    Habs erst jetzt gesehen, Du hast ja eine Konsolenanwendung. Inwieweit man aus einer solchen überhaupt auf die WinAPI zugreifen kann, kann ich Dir leider nicht genau beantworten (bin damals von DOS direkt auf WinAPI umgestiegen). Aber meiner Meinung nach geht das so überhaupt nicht.



  • Ich hab jetzt eine Lösung gefunden:
    In der Headerdatei "shlobj.h" war die Deklaration von "SHGetSpecialFolderPath" mit folgender Direktive eingeschränkt:

    #if (_WIN32_IE >= 0x0400)
    

    Naja, ich habs auskommentiert und jetzt funktionierts.

    //OT: Warum sollte man APIs nicht aus einer Konsolenanwendung aufrufen können? WinAPI muss nicht zwangsweise etwas mit der GUI-Programmierung zu tun haben, es ist einfach ne Schnittstelle mit der man Windows steuern kann.

    mfg vredezbyrD



  • vredezbyrD schrieb:

    Ich hab jetzt eine Lösung gefunden:
    In der Headerdatei "shlobj.h" war die Deklaration von "SHGetSpecialFolderPath" mit folgender Direktive eingeschränkt:

    #if (_WIN32_IE >= 0x0400)
    

    Naja, ich habs auskommentiert und jetzt funktionierts.

    Nach dem Motto "Was nicht passt, wird passend gemacht". Du solltest deine Projekteinstelllungen anpassen, aber nicht fremden Code auskomentieren.


Anmelden zum Antworten