IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[MFC]CreateProcess


Sujet :

MFC

Vue hybride

benahpets [MFC]CreateProcess 22/09/2005, 13h48
nico-pyright(c) Pour lancer des applications... 22/09/2005, 14h00
benahpets Est ce propre de lancer un... 22/09/2005, 14h09
Médinoc Hum... Ton processus est en... 22/09/2005, 14h10
nico-pyright(c) c'est aussi propre que lancer... 22/09/2005, 14h12
benahpets Ce que je voudrais faire... 22/09/2005, 15h17
nico-pyright(c) ben, c'est pas le domodal qui... 22/09/2005, 15h29
Aurelien.Regat-Barrel // attente ... 22/09/2005, 15h30
Médinoc Dans ce cas, jeter un coup... 22/09/2005, 15h45
benahpets J'ai pas bien compris... 22/09/2005, 15h53
Aurelien.Regat-Barrel C'est pas le cas. Modifies... 22/09/2005, 16h08
benahpets Ben je ne vois apparaitre... 22/09/2005, 16h23
nico-pyright(c) mets en un avant, et ferme ta... 22/09/2005, 16h57
benahpets apparement c'est ca : ca ne... 22/09/2005, 18h00
Médinoc Jette un coup d'oeil sur le... 22/09/2005, 22h05
Aurelien.Regat-Barrel Essaye de lire nos... 23/09/2005, 10h56
benahpets Désolé de t'avoir énervé... 27/09/2005, 13h43
Médinoc La boite de dialogue modale... 27/09/2005, 17h12
benahpets Salut, j'ai fait comme tu as... 01/10/2005, 14h33
Médinoc Euh.. Je ne crois pas que tu... 01/10/2005, 22h53
farscape salut, dans son cas oui ça... 02/10/2005, 07h51
Médinoc Bizarre... Parce que dans ce... 02/10/2005, 10h47
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut [MFC]CreateProcess
    Dans mon application, j'utilise des executables (tar, gzip). Je voudrais les lancer avec CreateProcess. J'ai d'abord essayé en écrivant le batch suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    cd..
    cd..
    C:
    cd Documents and Settings\Administrator\Desktop\
    "F:\Project\tar" -cv --file=anim.tar azipper*
    "F:\Project\gzip" -9 < anim.tar > anim.tgz
    del anim.tar
    et en le lancant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    STARTUPINFO         siStartupInfo;
    PROCESS_INFORMATION piProcessInfo;
     
    memset(&siStartupInfo, 0, sizeof(siStartupInfo));
    memset(&piProcessInfo, 0, sizeof(piProcessInfo));
    siStartupInfo.cb = sizeof(siStartupInfo);
    if(CreateProcess("lBatchPath",
                         NULL,0,0,FALSE,
                         CREATE_DEFAULT_ERROR_MODE,0,0,                              
                         &siStartupInfo,&piProcessInfo) == FALSE)
    {
    // erreur
    }
    Ca marche bien, mais Pendant que le batch tourne, mon appli ne répond plus (alors que n'importe quelle autre application qui tourne sur la machine en meme temps répond.) Comment faire pour découpler le processus lancé de mon appli pour que celle ci ne plante plus.

    Par ailleurs, j'aimerai utiliser une autre méthode que les batches, peut etre en lancant tar et gzip directement avec CreateProcess, mais ca ne marche pas...


    Merci pour votre aide

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Pour lancer des applications en ligne de commande, il faut bien souvent avoir recourt à l'interpreteur de commande.
    A savoir, lancer "cmd.exe /C gzip -9 ..."
    CreateProcess va lancer l'interpréteur de commande, mais ne devrait pas bloquer ton autre application, sauf si tu attends son déroulement expressement avec Waitforsingleobject

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    Est ce propre de lancer un executable en batch a partir d'une application?? Y a t'il d'autres moyens??

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Hum... Ton processus est en mode console?
    Dans ce cas, il est en effet possible qu'il ne réponde plus si tu lances d'autres processus console (ils s'exécutent dans la même console et prennent les entrées au clavier...

    Essaie en rajoutant le flag DETACHED_PROCESS (ou bien CREATE_NEW_CONSOLE, mais pas les deux) : L'un d'eux devrait résoudre le problème.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Citation Envoyé par benahpets
    Est ce propre de lancer un executable en batch a partir d'une application?? Y a t'il d'autres moyens??
    c'est aussi propre que lancer l'interpreteur de commande cmd.exe
    L'utilisation de l'interpreteur ou du batch est utile lorsqu'il y a une ligne de commande associée

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    Ce que je voudrais faire alors, c'est réduire mon application et afficher une dialogue pour faire patienter l'utilisateur en attendant que le fichier ciblé soit zippé...

    Ce code marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    	STARTUPINFO         siStartupInfo;
    	PROCESS_INFORMATION piProcessInfo;
     
    	memset(&siStartupInfo, 0, sizeof(siStartupInfo));
    	memset(&piProcessInfo, 0, sizeof(piProcessInfo));
    	siStartupInfo.cb = sizeof(siStartupInfo);
     
    	if(CreateProcess(lpFileName,
    							   NULL,0,0,FALSE,
    							   CREATE_NO_WINDOW,0,0,                              
    							   &siStartupInfo,&piProcessInfo) == FALSE)
    	{
    	// erreur
    	}
    	else
    	{
    		this->GetParent()->ShowWindow(SW_HIDE); // On cache l'application
     
    		// attente
    		WaitForSingleObject(piProcessInfo.hProcess, INFINITE);
     
    	    ::CloseHandle(piProcessInfo.hThread);
    	    ::CloseHandle(piProcessInfo.hProcess);
     
    		this->GetParent()->ShowWindow(SW_SHOW); // On montre l'application
     
    	}

    Mais je n'arrive le code suivant (avec la dialog qui demande de patienter) ne marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    if(CreateProcess(lpFileName,
    							   NULL,0,0,FALSE,
    							   CREATE_NO_WINDOW,0,0,                              
    							   &siStartupInfo,&piProcessInfo) == FALSE)
    	{
    	// erreur
    	}
    	else
    	{
     
    		this->GetParent()->ShowWindow(SW_HIDE);
    		CPleaseWaitDlg dlg(this);
    		dlg.DoModal();
     
    		// attente
    		WaitForSingleObject(piProcessInfo.hProcess, INFINITE);
     
    	    ::CloseHandle(piProcessInfo.hThread);
    	    ::CloseHandle(piProcessInfo.hProcess);
     
    		this->GetParent()->ShowWindow(SW_SHOW);
                    dlg.DestroyWindow();
     
    	}

  7. #7
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    ben, c'est pas le domodal qui attent que tu sortes de la fenetre pour continuer ? il faut faire une fenetre mais pas modale

  8. #8
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          // attente 
          WaitForSingleObject(piProcessInfo.hProcess, INFINITE);
    ben oui, tu attends, donc tu bloques ton appli...
    Faut passer dans la boucle des messages. Utilise MsgWaitForMultipleObjects pour en même temps attendre des messages à traiter. Si c'est le cas tu les traites, et t'auras plus de freeze.

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Dans ce cas, jeter un coup d'oeil sur ce sujet pourrait d'aider: C'est assez similaire:
    Destruction automatique d'une fenêtre d'attente
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    J'ai pas bien compris pourquoi le DoModal empechait de sortir de la fonction WaitForSingleObject

  11. #11
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    C'est pas le cas.
    Modifies ton code ainsi:
    else
    {

    this->GetParent()->ShowWindow(SW_HIDE);
    CPleaseWaitDlg dlg(this);
    dlg.DoModal();

    MessageBox( 0, "Debut de WaitForSingleObject", "", 0 );

    // attente
    WaitForSingleObject(piProcessInfo.hProcess, INFINITE);

    MessageBox( 0, "Fin de WaitForSingleObject", "", 0 );

    ::CloseHandle(piProcessInfo.hThread);
    ::CloseHandle(piProcessInfo.hProcess);

    MessageBox( 0, "Affichage du dialogue", "", 0 );

    this->GetParent()->ShowWindow(SW_SHOW);
    dlg.DestroyWindow();

    }
    tu devrais comprendre.

  12. #12
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    Ben je ne vois apparaitre aucune des MessageBox : :

    Ca ne rentre jamais dans WaitForSingleObject ???

  13. #13
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    mets en un avant, et ferme ta fenetre (modale) qui est sensée faire la progression ... tu verras ...

    Vaut quand meme mieux faire une fenetre non modale

  14. #14
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    apparement c'est ca : ca ne rentre pas dans WaitForSingleObject quand on ouvre une BDD modale.

    mets en un avant, et ferme ta fenetre (modale) qui est sensée faire la progression ... tu verras ... Wink

    Quand je fais ca je n'ai MessageBox( 0, "Debut de WaitForSingleObject", "", 0 ); qu'une fois que j'ai fermé la BDD modale.

    Quand j'utilise une BDD non modale, ca marche, mais elle se fige (contrairement à la BDD modale) donc c'est presque bien mais faut que je résolve ce probleme de "figeage":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    else
    	{
    		this->GetParent()->ShowWindow(SW_MINIMIZE);
    		CPleaseWaitDlg* waitDlg;
    		waitDlg = new CPleaseWaitDlg();
     
    		if ( waitDlg != NULL )
    		{
    			waitDlg->Create(IDD_WAITDLG,this);
    			waitDlg->SetActiveWindow();
    			waitDlg->ShowWindow(SW_SHOW);	
    		}
     
    		MessageBox("Debut de WaitForSingleObject"); 
     
    		// attente
    		WaitForSingleObject(piProcessInfo.hProcess, INFINITE);
     
    		MessageBox("Fin de WaitForSingleObject"); 
     
    	    ::CloseHandle(piProcessInfo.hThread);
    	    ::CloseHandle(piProcessInfo.hProcess);
     
    		MessageBox("Affichage du dialogue"); 
    		this->GetParent()->ShowWindow(SW_RESTORE);
    		waitDlg->DestroyWindow();
     
    	}

  15. #15
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Jette un coup d'oeil sur le topic dont je t'ai parlé, ça a l'air de bien marcher...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Essaye de lire nos réponses...

  17. #17
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    Citation Envoyé par nico-pyright(c)
    ben, c'est pas le domodal qui attent que tu sortes de la fenetre pour continuer ? il faut faire une fenetre mais pas modale
    Citation Envoyé par Aurelien.Regat-Barrel
    ben oui, tu attends, donc tu bloques ton appli...
    Citation Envoyé par Médinoc
    Jette un coup d'oeil sur le topic dont je t'ai parlé, ça a l'air de bien marcher...
    Citation Envoyé par Médinoc
    Sinon, il est également possible de le faire avec une BDD modale, un Timer et une fonction OnTimer() qui teste si le thread est toujours actif avec ::WaitForSingleObject(hThread, 0)...
    Citation Envoyé par Aurelien.Regat-Barrel
    Essaye de lire nos réponses... Rolling Eyes
    Désolé de t'avoir énervé Aurélien, mais on peut dire que je suis débutant et là, j'ai eu des conseils un peu contradictoires...
    Dois je utiliser une BDD modale ou non. Sachant que lorsqu'elle est non modale, elle ne se rafraichit pas et lorsqu'elle est modale elle bloque tout???

    Merci pour votre patience, en tout cas

  18. #18
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    La boite de dialogue modale bloque la boite de dialogue qui tourne en-dessous, mais si j'ai bien compris, c'est ce qui est attendu...

    Tout ce qui manque à présent, c'est que la BDD modale se ferme toute seule quand le process est terminé.
    Pour cela, on définit un timer avec la méthode SetTimer() (tous les quarts de seconde par exemple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetTimer(1, 250, NULL);
    Puis on définit un handler pour le message WM_TIMER:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    void CPleaseWaitDlg::OnTimer()
    {
      //On n'ATTEND rien : On REGARDE juste si le process est terminé  
      int iResult = WaitForSingleObject(hProcess, 0);
      switch(iResult)
      {
      case WAIT_OBJECT_0:
        //Le process est terminé
        EndDialog(0);
        break;
      case WAIT_TIMEOUT:
        //Le process tourne toujours : on ne fait rien
        break;
      case WAIT_FAILED:
        //Erreur
        EndDialog(1);
        break;
      default:
        ASSERT(FALSE);
      }
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #19
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Par défaut
    Salut, j'ai fait comme tu as dit, le problème, c'est que ma fenêtre modale se ferme tout seule, car à chaque fois iResult renvoie WAIT_FAILED et la bdd est détruite. Comme le processus est crée dans une autre classe, je le mets en public et je le récupère dans le OnTimer, mais, ca ne marche pas...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    BOOL CPleaseWaitDlg::OnInitDialog() 
    {
    	CDialog::OnInitDialog();
     
    	this->SetWindowText(TITLE);
    	m_waitText.SetWindowText("Please Wait...\nCompression of the data is processing");
    	SetTimer(1,250,NULL);
    	return TRUE;  // return TRUE unless you set the focus to a control
    	              // EXCEPTION: OCX Property Pages should return FALSE
    }
     
    void CPleaseWaitDlg::OnTimer(UINT nIDEvent) 
    {
    	PROCESS_INFORMATION lProcessInfo;
    	CJobQueueDlg *parentDlg = (CJobQueueDlg *)this->GetParent();
    	lProcessInfo = parentDlg->piProcessInfo;
    	//On n'ATTEND rien : On REGARDE juste si le process est terminé 
    	int iResult = WaitForSingleObject(lProcessInfo.hProcess, 0);
    	switch(iResult)
    	{
    		case WAIT_OBJECT_0:
    			//Le process est terminé
    			EndDialog(0);
    			break;
    		case WAIT_TIMEOUT:
    			//Le process tourne toujours : on ne fait rien
    			break;
    		case WAIT_FAILED:
    			//Erreur
    			EndDialog(1);
    			break;
    		default:
    			ASSERT(FALSE);
    	} 
     
    	CDialog::OnTimer(nIDEvent);
    }

    Déclaration de la classe CJobQueueDlg
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Implementation de CJobQueueDlg
    public:
    	STARTUPINFO         siStartupInfo;
    	PROCESS_INFORMATION piProcessInfo;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    void CJobQueueDlg::CompressInputFiles()
    {
    	//Début de la fonction... Sans intéret
     
    	memset(&siStartupInfo, 0, sizeof(siStartupInfo));
    	memset(&piProcessInfo, 0, sizeof(piProcessInfo));
    	siStartupInfo.cb = sizeof(siStartupInfo);
     
     
    	if(CreateProcess(lpFileName,
    				NULL,0,0,FALSE,
    				CREATE_NO_WINDOW,0,0,                              
    				&siStartupInfo,&piProcessInfo) == FALSE)
    	{
    	// erreur
    	}
    	else
    	{
    		this->GetParent()->ShowWindow(SW_MINIMIZE);
     
    		CPleaseWaitDlg waitDlg(this);
    		waitDlg.DoModal();
     
    		this->GetParent()->ShowWindow(SW_RESTORE);
    	}
    }
    Je ne vois pas ou est l'erreur, mais dans la fenetre de debug, piProcessInfo.hProcess et lProcessInfo.hProcess ne renvoient pas a la meme adresse mémoire (je ne dis pas de betises la?)

    Merci de votre aide

  20. #20
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Euh.. Je ne crois pas que tu puisses copier ainsi une structure PROCESS_INFORMATION (qui contient quatre mots de 32bits)... Tu dois faire soit un memcpy, soit déclarer simplement un pointeur qui pointe vers la même.

    Ou bien, tu peux aussi passer simplement hProcess à la boite de dialogue, puisqu'elle n'a besoin que de lui...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 07h38
  3. [MFC](encapsulation ADO) ou placer le code
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2002, 14h58
  4. Réponses: 2
    Dernier message: 10/06/2002, 11h03
  5. [MFC] ADO connection
    Par philippe V dans le forum MFC
    Réponses: 3
    Dernier message: 10/06/2002, 07h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo