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

Signaler
Messages postés
8
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
4 avril 2012
-
Messages postés
8
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
4 avril 2012
-
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

Messages postés
3817
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
2 septembre 2020
112
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
Messages postés
8
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
4 avril 2012

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);
}
};
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
19
Salut,

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

System::Diagnostics::Process
Messages postés
8
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
4 avril 2012

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.
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
19
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.
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
19
Donc ShellExecute en .net =


using namespace System::Diagnostics;

Process^ myProcess = gcnew Process;
myProcess->StartInfo->FileName = "file.ext";
myProcess->StartInfo->Verb = "Open";
myProcess->Start();
Messages postés
8
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
4 avril 2012

Merci pour tes explications. Je vais essayer d'appliquer cela et voir.
A+ ;-)
Messages postés
8
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
4 avril 2012

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 !!!