GetVolumeNameForVolumeMountPoint() benutzten


  • Mod

    Zeig mal den kompletten Code Deiner stdafx.h!
    Da sind mehrfach Definitionen drin. Das sagen die Fehlermeldungen eindeutig.

    Grundsätzlich:
    Wenn Du vorkompilierte Header verwendest, wird jeder Code vor #include "stdafx.h" ignoriert!



  • Glaube den Fehler gefunden zu haben.
    Ich check das morgen nochmal und schreib dann die Lösung...



  • Es hat geklappt.

    Der Fehler war " #define _WIN32_WINNT 0x0501 ".
    Im Beispiel aus der Doku steht es so drin.
    In der Beschreibung von GetVolumeNameForVolumeMountPoint() steht
    "define the _WIN32_WINNT macro as 0x0500 or later".

    -> " #define _WIN32_WINNT 0x0500 "

    Zumindest bei mir geht es nur mit 0x500. Denn bei 0x501 gibt es andere Probleme, dass er Inlinecode ( 😕 ) nicht findet.

    Also sieht meine stdafx.h so aus:

    #pragma once
    
    #define _WIN32_WINNT	0x0500
    
    #ifndef WINVER
    #define WINVER 0x0400
    #endif
    
    #ifndef _WIN32_WINNT
    #define _WIN32_WINNT 0x0400
    #endif
    

    Mein Compiler scheint also die 0x501 nicht zu mögen, ganz unabhängig von GetVolume..().

    Ich würd gern noch wissen warum..?

    Grundsätzlich:
    Wenn Du vorkompilierte Header verwendest, wird jeder Code vor #include "stdafx.h" ignoriert!

    Was bedeutet denn hier "vor"? In meiner.cpp? Bzw ich weiß nicht wann stdafx ausgeführt wird.


  • Mod

    Jeder Code der vor dem #include "stdafx.h" included wird, der wird ignoriert.

    Warum hast Du #include <windows.h> nicht in Deinem stdafx.h drin?

    Warum hast Du weiterhin diese komischen #ifndef Dinger drin?

    Bist Du sicher, das Du auch das letzte SDK verwendest?

    Welche VS Version nutzt Du?
    VC6? Dann gehe ich davon aus, dass Du die falschen SDK Header verwendest.



  • 1. Alles kla. Sie steht bei mir überall an erster Stelle. Das war bislang aber mehr Glück als Wissen.. Danke!

    2. Die #include <..> schreib ich immer in die passende *.cpp (nur) um Überblick zu haben. Das hat auch mit den precompiled Header zu tun? Bislang hab ich die stdafx nie angefasst.. Man sollte sie auch (alle) in die stdafx schreiben?

    3. Ja richtig, die können raus. Da steht ja ifNdef. Stört aber nicht oder?

    4. Microsoft Windows SDK for Windows Vista Build 11/7/2006
    Ist das vielleicht nicht das neuste? Auf der MS Seite hab ich sonst nur SDK für WinServer gesehen.

    Ich habe MS Visual Studio .NET 2003 Service Pack1 und WinXP Prof.
    Da werd ich doch auch hoffentlich kein Problem mit "for Vista" haben?
    Aussderm hab ich das alte SDK nicht extra entfernt. Da hab ich drauf vertraut das das Setup automatisch alles für mich ändert.

    Also sollte es eigentlich auch mit 0x501 funktionieren und ich hab da noch ein anderes Problem?


  • Mod

    Das VS2003 SDK, das mit gelifert wird müsste voll und ganz langen.
    Die Installation eines neuen SDK's heißt nicht, das die alten Dateien deinstalliert werden müssen.
    Es werden nur die Environment Variablen für INCLUDE und LIB geändert.

    Wnen Du den define setzt wie beschrieben bevor die windows.h included wird, dann muss es funktionieren.



  • Wie sich sicher anhand meiner Beiträge gezeigt hat, fische ich etwas im trüben..

    Wenn ich in allen Dateien meines Projektes #include<windows.h> auskommentiere, funktioniert es ohne Probleme.

    Wenn ich #include<windows.h> in die stdafx.h schreibe kommt:
    Visual Studio 2003\Vc7\atlmfc\include\afxv_w32.h(18) : fatal error C1189: #Fehler: WINDOWS.H already included. MFC apps must not #include <windows.h>

    Wenn ich dann noch #define _WIN32_WINNT 0x0501 passiert:

    afxwin.h(3289) : error C2061: Syntaxfehler: Bezeichner 'PSCROLLBARINFO'
    afxwin4.inl(148) : error C2065: 'PSCROLLBARINFO': nichtdeklarierter Bezeichner
    ..
    afxwin4.inl(149) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    ..
    afxcmn3.inl(18) : error C2065: 'CCM_SETWINDOWTHEME': nichtdeklarierter Bezeichner
    ..
    11 Fehler

    Liegt das an mir? Ist bei meinem VS etwas schief..?

    Des weiteren hab ich grad mal geschaut was MVP - C++ bedeutet. Alles klar, das erklär Deine Antworten.. 🙂

    Vielleicht kann ich dann auch einfach direkt mein Problem stellen, weswegen ich auch GetVolume.. benutzten möchte.
    Wenn ich einen USB Stick reinstecke, bekommt dieser einen Laufwerksbuchstaben. Wenn ich ihn an einen anderen Port stecke bleibt der Buchstabe erhalten.
    Ich möchte ein Tool schreiben, dass mir sagt zB g:\ = Port x

    Das das nicht einfach ist musste ich bereits festellen, da ich wirklich schon lange im Netz auf der Suche nach einer Antwort bin. Dann hab ich einen Code gefunden, den ich versuche nachzubauen. Dabei stoße ich aber immer auf das Problem das ich im trüben fische.. (SetupDi... & Co).
    Unbekannter Bezeichner, weder in SDK noch DDK zu finden usw. Und dann kommen noch so Probleme wie oben beschrieben. Ich weiß nicht wo ich anfangen soll zu lernen.


  • Mod

    Argh... es ist nicht zu fassen.
    Wenn Du die MFC verwendest darfst Du die windows.h nicht includen. Dann einfach nur #include <afxwin.h> und vorher den define gemacht.
    Oder ist die Fehlermeldung nicht eindeutig?

    Visual Studio 2003\Vc7\atlmfc\include\afxv_w32.h(18) : fatal error C1189: #Fehler: WINDOWS.H already included. MFC apps must not #include <windows.h>

    Aber Du postest hier im WinAPI Forum...



  • Dem war ich mir nicht bewusst. Ich dachte WinApi, da MSDN: WINAPI GetVolumeNameForVolumeMountPoint

    Das das nur die halbe Wahrheit war weiß ich jetzt.
    Tut mir leid das ich dadurch Verwirrung gestiftet habe. 😞

    Jetzt geht natürlich auch alles.
    Vielen Dank für die Antworten!


  • Mod

    Man kann WinAPI und MFC gar nicht trenne. Ich würde immer anraten eher im MFC Forum zu Posten, wen Du MFC Code + WinAPI nutzt.
    Zudem war dies ja kein Problem mit der Funktion selber, sondern eher mit der Syntax...

    Verschieben kann man das ganze immer noch.


Anmelden zum Antworten