ShellExecute et 'NULL' : identificateur non déclaré

alilou2955 Messages postés 8 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 4 avril 2012 - 27 mars 2012 à 13:50
alilou2955 Messages postés 8 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 4 avril 2012 - 4 avril 2012 à 13:46
Bonjour.
Je voudrais utiliser la commande ShellExecute pour lancer une appli. Pour cela j'ai créé un petit programme avec "Visual Studio" (Nouveau projet --> Application Windows Forms) Ce programme a une fenêtre qui a un bouton. Dans la button1_Click j'ai mis ceci:
   ShellExecute(NULL,"open","../../../Sirat1/START.EXE",NULL,NULL,SW_SHOWNORMAL);

Lors de la compile, il me dit :
Form1.h(91) : error C2065: 'NULL' : identificateur non déclaré

Quand j'ajoute dans le même fichier la ligne:
#include "windows.h"

Il m'affiche beaucoup de messages dont, par exemple :
1>c:\program files\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(234) : error C3083: 'vc_attributes' : le symbole situé à gauche de '::' doit être un type

Apparemment, il faut ajouter des biblio ou inclure des choses au projet mais j'ignore comment le faire. Pouvez-vous m'aider SVP ?
Merci.

8 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
27 mars 2012 à 14:12
Bonjour.

Tu remplaces NULL par 0 tout simplement.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
alilou2955 Messages postés 8 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 4 avril 2012
27 mars 2012 à 23:59
rebonjour.
Merci pour ta réponse.
Au fait, je l'avais déjà fait. J'ai remplacé NULL par 0, mais il me dit après qu'il ne connait pas SW_WHOWNORMAL et ShellExecute:
1>g:\.........\Form1.h(91) : error C2065: 'SW_SHOWNORMAL' : identificateur non déclaré
1>g:\.........\Form1.h(91) : error C3861: 'ShellExecute' : identificateur introuvable


La solution à ce ptit pb, est normalement au niveau de liens, il faut ajouter la biblio windows.h convenablement. Peut être à travers la barre de menu de MS Visual Studio !!!

Pour info, voila ma fonction:
#pragma endregion
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
 ShellExecute(NULL,"open","../../../Sirat1/START.EXE",NULL,NULL,SW_SHOWNORMAL);
}
};
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
28 mars 2012 à 13:25
Salut,

apparemment tu es en mode c++ cli (.net)
il faut utiliser des objets .net :

System::Diagnostics::Process
0
alilou2955 Messages postés 8 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 4 avril 2012
29 mars 2012 à 12:28
Bonjour.
Je ne comprend pas bien ce que vous voulez dire. La commande que j'ai tapée ne correspond pas ? Si tel est le cas, comment faire alors ? Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
29 mars 2012 à 21:04
Et bien il y a plusieurs manières de coder en c++ avec visual studio,
Par exemple :
- C/C++ win32/64 (natif)
- C++ et MFC
- C++ et .net (mode managé, cad: interprété comme le C# ou le vb .net)
- C++ / STL
- C++ / DirectX
ect, ect...

Dans ton cas, tu as créé un projet de c++ managé (/clr au compilateur)
(Application Windows Forms)

Ce qui fait que tu ne paux pas utiliser le code natif comme ShellExecute.
par "natif" s'entend utiliser une fonction d'une dll du système (kernel32, user32 ect...)

Donc il faut créer un projet Win32 ou win64 qui ne prend pas en charge le framework .net. Je ne sais plus comment microsoft nomme ce genre de projet dans visual studio mais ce doit etre très facile à retrouver.
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
29 mars 2012 à 21:10
Donc ShellExecute en .net =


using namespace System::Diagnostics;

Process^ myProcess = gcnew Process;
myProcess->StartInfo->FileName = "file.ext";
myProcess->StartInfo->Verb = "Open";
myProcess->Start();
0
alilou2955 Messages postés 8 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 4 avril 2012
29 mars 2012 à 23:26
Merci pour tes explications. Je vais essayer d'appliquer cela et voir.
A+ ;-)
0
alilou2955 Messages postés 8 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 4 avril 2012
4 avril 2012 à 13:46
Bonjour.
J'ai utilisé le code suivant que vous m'avez donné:
using namespace System::Diagnostics;

Process^ myProcess = gcnew Process;
myProcess->StartInfo->FileName = "file.ext";
myProcess->StartInfo->Verb = "Open";
myProcess->Start();


Il me dit qu'il ne trouve pas le fichier concerné !!!
************** Texte de l'exception **************
System.ComponentModel.Win32Exception: Le fichier spécifié est introuvable
   à System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
   à System.Diagnostics.Process.Start()
   à Lien_appli_DVD_Sira_AlHabib.Form1.button1_Click(Object sender, EventArgs e) dans g:\diiin\dvd\pgm_cpp\lien_appli_dvd\lien_appli_dvd\form1.h:ligne 98
   à System.Windows.Forms.Control.OnClick(EventArgs e)
   à System.Windows.Forms.Button.OnClick(EventArgs e)
   à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   à System.Windows.Forms.Control.WndProc(Message& m)
   à System.Windows.Forms.ButtonBase.WndProc(Message& m)
   à System.Windows.Forms.Button.WndProc(Message& m)
   à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   à System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Assemblys chargés **************
mscorlib


A la place de file.ext j'ai mis le lien relatif vers le fichier concerné puis le lien absolu, mais toujours même erreur !!!
0
Rejoignez-nous