[VC++] Compiler un petit bout de C du site Microsoft !

Compiler un petit bout de C du site Microsoft ! [VC++] - C++ - Programmation

Marsh Posté le 24-06-2003 à 17:52:23    

Salut,  
 
Je suis plutot un débutant avec Visual C++! Aussi, j'aurais besoin de votre aide (je suis sur que c'est facile) pour que le code à la page suivante marche :
 
http://msdn.microsoft.com/library/ [...] points.asp
 
Personnellement, j'ai créé une simple Console Application (Empty Project) et créé un fichier .c, et j'ai lancé le build + compile, et a priori, il me met des erreurs du type :
 
c:\program files\microsoft visual studio\myprojects\rudimentaire\essai.cpp(40) : error C2065: 'GetVolumeNameForVolumeMountPoint' : undeclared identifier
 
Donc, je suppose qu'il manque quelque chose... mais quoi? Dans ce qui est marqué dans les requirements, il me semble que j'ai tout ! (c'est par défaut avec VC++6)
 
Merci pour votre aide.

Reply

Marsh Posté le 24-06-2003 à 17:52:23   

Reply

Marsh Posté le 24-06-2003 à 18:05:11    

ca compile nickel chez moi (mis a part les warnings).
 
t'as bien fais : new project -> win32 application -> console application + empty project ?
 
a mon avis t'as omis le "#define _WIN32_WINNT 0x0501" tout en haut

Reply

Marsh Posté le 24-06-2003 à 18:16:41    

Bah moi j'avais fait :
 
New Projects -> Win32 Application -> En Empty Project !
 
Ensuite, j'ai créé un ichier .c, et j'ai lancé la compilation, et il me trouve les 9 erreurs dont je donne la premeire au dessus !
 
Par contre, je viens encore de rééessayer, et j'ai bien inclus tout le code !
 
What's wrong?

Reply

Marsh Posté le 24-06-2003 à 18:22:00    

y a "int main(void)" ds le code.
 
faut bien faire :
 
New Project (win32 project) puis ds les application settings, faire Console application + empty project.

Reply

Marsh Posté le 24-06-2003 à 18:40:02    

Attends, je fais un Win32 Application ou un Win32 Console Application?
 
Tu dois te dire que je suis un peid, mais il n'est pas possible de suivre à la lettre les steps que tu donnes (je n'ai pas de Win32 Project disponible en tant que tel dans les différents projets possibles)

Reply

Marsh Posté le 24-06-2003 à 18:44:29    

tu dois avoir VC6.
 
faut faire 'console' en tout cas.

Reply

Marsh Posté le 24-06-2003 à 19:19:01    

Oui, en effet, j'ai VS6 (désolé d'avoir omis ce détail)
 
Donc, j'ai fait :
Win32 Console Application -> Empty Project !
 
Ensuite, j'ai fait new File, et j'ai collé le code et j'exécute, mais ca me donne les erreurs dont je t'ai parlées !
 
en fait, il ne "voit" pas les fonctions...
 
c:\program files\microsoft visual studio\myprojects\tyutyu\dsdsq.cpp(40) : error C2065: 'GetVolumeNameForVolumeMountPoint' : undeclared identifier
c:\program files\microsoft visual studio\myprojects\tyutyu\dsdsq.cpp(54) : error C2065: 'FindNextVolumeMountPoint' : undeclared identifier
 
....

Reply

Marsh Posté le 24-06-2003 à 22:01:14    

Bah alors????

Reply

Marsh Posté le 24-06-2003 à 23:40:56    

je viens d'essayer de compiler avec vc6.
ca marche pas.
d'après le MSDN, GetVolumeNameForVolumeMountPoint est déclaré dans winbase.h et je l'ai pas dans le mien.
soit faut mettre un service pack à visual studio, soit c'est une nouveauté vs7.

Reply

Marsh Posté le 24-06-2003 à 23:54:20    

:sweat:  
 
Euh....Bon, bah j'ai plus qu'a retourner me coucher moi...
 
Arf, c'est vraiment dommage!
 
En tout cas, merci pour ton aide !
 
Moi qui comptais me faire une DLL avec une fonction pour retrouver le num de série de mes Disques durs, si déja ca marche pas ici, c'est clair que ca risque pas de marcher ailleurs...

Reply

Marsh Posté le 24-06-2003 à 23:54:20   

Reply

Marsh Posté le 25-06-2003 à 00:41:29    

si tu veux juste récupérer le numéro de série :

Code :
  1. #include <windows.h>
  2. #include <stdio.h>
  3. int main(void)
  4. {
  5. char volName[256];
  6. DWORD volSerial;
  7. DWORD nameLen;
  8. DWORD volFlags;
  9. char volFS[256];
  10. GetVolumeInformation("c:\\", volName, 256, &volSerial, &nameLen, &volFlags, volFS, 256);
  11. printf("Nom de volume : %s\n", volName);
  12. printf("Numéro de série : %04X-%04X\n", (volSerial >> 16) & 0xffff,  volSerial & 0xffff);
  13. return 0;
  14. }


 
après (ou avant, c'est plus pratique) pour énumérer tes DD  :

Code :
  1. char drive[] = "c:\\";
  2. for (int i = 'c'; i < 'z';  i++ )
  3. {
  4.  drive[0] = (char)i;
  5.  if(GetDriveType(drive) == DRIVE_FIXED)
  6.  {
  7.   printf("HDD %s trouvé\n", drive);
  8.  }
  9. }


 
edit : je promets pas que c'est super codé, y en a peut être qui vont râler que c'est codé avec les pied, mais ca a l'air de pas trop mal marcher pour l'instant.
il te reste plus qu'a MSDNiser GetVolumeInformation et GetDriveType.


Message édité par SquiZZ le 25-06-2003 à 00:53:51
Reply

Marsh Posté le 25-06-2003 à 02:46:58    

Parfait, ca marche !  
 
Par contre, je me demande bien pourquoi le code du site de MSoft ne marche pas !
 
Merci en tout cas ;)

Reply

Marsh Posté le 25-06-2003 à 09:39:38    

Vis a vis de ton pb du code MSN, c koi ton OS ?

Reply

Marsh Posté le 25-06-2003 à 11:34:39    

VisualC++ a écrit :

Vis a vis de ton pb du code MSN, c koi ton OS ?


 
c vrai qu'a cause du #define du haut, faut mini un 2000
 
pour la fct ki pose pb, d'apres les man :
Client: Included in Windows XP and Windows 2000 Professional.
Server: Included in Windows Server 2003 and Windows 2000 Server.

Reply

Marsh Posté le 25-06-2003 à 12:15:54    

Bah j'ai WinXP Pro, et comme je vous l'ai dit, en fait, toutes les fonctions génèrent une erreur...  :sweat:

Reply

Marsh Posté le 25-06-2003 à 12:19:28    

Normalement XP Pro devrait passer, mais oui la question c vis a vis de la doc de la fonction c clairment marque en gros noyau NT
 
La je viens de teste un gros copie coller ds un Win32 console vide du code sous VS.Net et ca marche (sous XP pro)

Reply

Marsh Posté le 25-06-2003 à 12:41:52    

Cela semble être un problème de Platform SDK. Tu utilises les headers fournis avec Visual Studio 6.0 qui ne référencent pas ces fonctions (à l'époque Windows 2000 n'était pas sorti).
Il faut donc que tu ailles télécharger le dernier Platform SDK disponible ici pour pouvoir profiter de ces fonctions.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 25-06-2003 à 13:54:23    

gatorette a écrit :

Cela semble être un problème de Platform SDK. Tu utilises les headers fournis avec Visual Studio 6.0 qui ne référencent pas ces fonctions (à l'époque Windows 2000 n'était pas sorti).
Il faut donc que tu ailles télécharger le dernier Platform SDK disponible ici pour pouvoir profiter de ces fonctions.


 
D'accord, je veux bien essayer ca, c'est une bonne idée....mais alors, la question, c'est de savoir si, en compilant tout ca dans un Dll, quelqu'un utilisant une autre version de Windows, genre 2000 (ou 98?) sera capable d'utiliser les fonctions incluses dans le dll ! (je compte faire un MFC Regular Dll, car pour le moment, je ne sais pas faire autrement comme Dll pouvant sutiliser avec VBA par exemple)

Reply

Marsh Posté le 25-06-2003 à 15:16:58    

Yoyo@ a écrit :


 
D'accord, je veux bien essayer ca, c'est une bonne idée....mais alors, la question, c'est de savoir si, en compilant tout ca dans un Dll, quelqu'un utilisant une autre version de Windows, genre 2000 (ou 98?) sera capable d'utiliser les fonctions incluses dans le dll ! (je compte faire un MFC Regular Dll, car pour le moment, je ne sais pas faire autrement comme Dll pouvant sutiliser avec VBA par exemple)


 
Bah personne pour répondre sur cette question?

Reply

Marsh Posté le 25-06-2003 à 15:19:31    

Tu ne devrais pas avoir de problèmes du moment que tu respectes les indications de la documentation. Par exemple, la fonction FindFirstVolume n'est disponible que sous Windows 2000 et XP.
Le Platform SDK est un SDK et pas une bibliothèque. C'est à dire qu'il n'ajoute pas de nouvelles fonctions mais te permet d'utiliser les fonctions présentes dans les versions récentes de Windows ou celles qui n'étaient pas documentées auparavant.


Message édité par gatorette le 25-06-2003 à 15:20:09

---------------
each day I don't die is cheating
Reply

Marsh Posté le 25-06-2003 à 17:12:11    

Merci pour les infos, je comprends mieux now !
 
Il me faut les bons SDK pour compiler et le bon Windows pour exécuter :)
 

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed