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

C Discussion :

Comment interrompre un programme en C sans utiliser exit(1) ?


Sujet :

C

  1. #1
    Battosaiii
    Invité(e)
    Par défaut Comment interrompre un programme en C sans utiliser exit(1) ?
    Bonjour,

    Ma situation est un peu complexe. J'utilise une librarie C depuis un
    form c#(fenetre UI). Pour ce faire j'utilise DLlimport pour utiliser
    les methodes en C.

    Mon probleme c'est que je n'arrive pas a tuer mon process(code en C) lorsque que je l'execute depuis mon C# code. Je peux modifier le code C pour
    creer une fonction qui detruirait ce process. Malheureusement
    je ne sais pas comment interrompre une methode en C. Si j'utilise exit(1)
    dans mon code C meme ma fennetre ecrite en C# est detruite.
    Comment detruire un process en C facilement ?

    Merci

  2. #2
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    C'est une bibliothèque, elle fait partie du processus de ton form, elle ne créé pas de nouveau processus, ce qui explique que le exit() détruit ton form, tu fais fausse route.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  3. #3
    Battosaiii
    Invité(e)
    Par défaut
    Merci de ta reponse. Pourquoi alors lorsqeu je lance mon programme une seconde fois mon programme en C me renvoie les variables precedentes . Ces variables sont envoyes depuis le C code avec Sendmessage et recuperer par mon c# code avec WndProc.

    J'obtiens ce message d'erreur lorsque je supprime un folder creer par le C code :

    The process cannot access the file 'log.txt' because it is being used by another proce

    Dans les details du message d'erreurs c'est ecrit :
    Source = mscorlib

    Stacktrace :

    at System.IO.Directory.DeleteHelper(String fullPath, String userPath, Boolean recursive)
    at System.IO.Directory.Delete(String fullPath, String userPath, Boolean recursive)
    at System.IO.Directory.Delete(String path, Boolean recursive)
    at Plugin.softFileImportMain.cleanUpTempDirectory(String pathDirectory)
    at Plugin.softFileImportMain.doDownloadFiles(String pathUrl, String fileName, String websiteMethod, ArgumentsSaveAsWebsite argumentsSaveAsWebsite)
    at Plugin.softFileImportMain.DoFileImport(WebBrowserClass _explorerWindow)
    at Plugin.softFileImportMain.doImport(WebBrowserClass _exp

  4. #4
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    C'est toi qui à parler de bibliothèque, je ne fais que des présomptions basées sur tes affirmations. Je me rends compte maintenant que maîtrise mal le vocabulaire informatique, j'ai aussi vu ton thread dans le forum C#, je te conseille afin d'éviter de perdre plus de temps de montrer ton code.
    Cordialement.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  5. #5
    Battosaiii
    Invité(e)
    Par défaut
    Bonjour
    Comme je te l'ai dit j'appelle une procedure ecrite en C depuis mon C# code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [DllImport(Constants.IEpluginHelperDll, EntryPoint = "mainApplicationTest", CallingConvention
    = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
            private static unsafe extern int mainApplicationTest(int argc, [In] IntPtr[] argv);
            private static unsafe int mainApplicationMarshalled(int argc, IntPtr[] argv)
            {
    Ensuite juste avant que la procedure en C se termine j' envoie un message a mon C# code pour qu'il sache que la procedure C est finie :

    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
     
     
    int mainApplicationTest(int argc, char **argv)
    {
    //some code 
     
     
    #ifdef _WIN32
      Cleanup();
    #endif
     
      	if (G_CallBackWND)
    	{
    		//procedure has terminated . It is time to tell the user the process is finished.
    		SendMessage(G_CallBackWND,WM_USER + 606, (WPARAM)(int)1,NULL);
    	}
    	return value;
    }
    Malgre cela lorsque je lance une seconde fois mon programme C# form mon c# form recoit alors les dernieres variables precedentes. Or ces variables devraient etre nul. C'est comme si ma procedure C etait pas termine proprement.

    Ensuite j'ai une autre erreur car je tente de supprimer un folder creer par ma procedure ecrite en C :
    the file is used by another process (voir erreur plus haut).

    Merci

Discussions similaires

  1. Comment interrompre mon programme en C ?
    Par bouraouimed dans le forum Linux
    Réponses: 4
    Dernier message: 08/09/2010, 08h52
  2. Réponses: 7
    Dernier message: 12/04/2007, 15h50
  3. Comment compiler avec javac des jar sans utiliser -cp
    Par Battosaiii dans le forum Langage
    Réponses: 7
    Dernier message: 06/10/2006, 17h03
  4. Réponses: 6
    Dernier message: 19/05/2006, 10h39
  5. Réponses: 6
    Dernier message: 27/05/2004, 10h41

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