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

VB 6 et antérieur Discussion :

compilation d'un programme à partir d'un autre programme??


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 20
    Points : 14
    Points
    14
    Par défaut compilation d'un programme à partir d'un autre programme??
    Bonjour,

    Je suis actuellement sur un projet comportant beaucoup de programmes différents.

    J'ai donc réalisé plusieurs modules avec l'extension .bas que je réutilise dans tous mes programmes.

    Seulement voila, quand je modifie une fonction de mon module commun, je peux remettre ce module dans tous mes programmes sans soucis mais pour que la modification soit active, je dois recompiler tous les programmes un à un.

    La recopie de mon module modifié est dynamique, j'ai juste à cliquer sur un bouton et la copie des repertoires se fait parfaitement. Je voudrais donc qu'a la suite de cette recopie mon programme soit également recompilé.

    En une phrase, je voudrais qu'en un clic tous mes programmes soient recompilés avec le nouveau module.

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Tu peux compiler un programme en ligne de commande avec VB, donc ton opération est possible :

    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
    Private Const C_COMMANDLINECOMPILE As String = """C:\Program Files\Microsoft Visual Studio\VB98\vb6.exe"" /make "
    Dim ProjetACompiler() As String
    Dim i As Integer
     
     
    Private Sub Compile()
     
        'remplissage de ProjetACompiler
        ReDim ProjetACompiler(1)    
     
        ProjetACompiler(0) = """D:\Toto\monProjet1.vbp"""
        ProjetACompiler(1) = """D:\Toto\monProjet2.vbp"""
     
        Screen.MousePointer = vbHourglass
     
        For i = 0 To UBound(ProjetACompiler)
            cmd = C_COMMANDLINECOMPILE & ProjetACompiler(i)
            Debug.Print cmd
            Shell cmd, vbNormalFocus
        Next i
     
        Screen.MousePointer = vbArrow
    End Sub
     
    Private Sub Command1_Click()
        Compile
    End Sub
    C'est juste un peu bourrin, ça compilera tout en même temps, donc risque d'erreurs/de saturation de mémoire. 2 solutions pour contourner ce problème :
    - Tu crées un fichier batch dans lequel tu places tes ordres de compilation, et tu éxecutes le traitement de ce fichier à la fin.
    - Tu utilise des API pour éxecuter tes traitements en boucle, en attendant pour chacun que le précédent soit terminé.

    Ex de fonction qui lance une tâche et qui attend sa fin :

    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
    38
    Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
    Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
            ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
     
    Public Const STILL_ACTIVE = &H103
    Public Const PROCESS_QUERY_INFORMATION = &H400
     
     
    Public Sub ExecuteTache(ByVal Tache As String, Optional ModShell As Variant)
        ' ---Cette fonction crée une tache puis regarde si elle est active---
        ' Tache est un nom de fichier
        ' ---Déclaration des variables---
        Dim hProcess As Long
        Dim RetVal As Long
        ' ---Ouvre un programme et récupère son handle (hProcess)---
        On Error GoTo errShell
        hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell(Tache, IIf(IsMissing(ModShell), vbMinimizedNoFocus, ModShell)))
        On Error GoTo 0
     
        ' ---Regarde si le processus est actif---
        Do
            ' Retourne le status du processus en cours
            GetExitCodeProcess hProcess, RetVal
            ' Les 2 lignes suivantes sont recommandées pour éviter de faire
            ' travailler le système avec GetExitCodeProcess
            DoEvents
            Sleep 500
        Loop While RetVal = STILL_ACTIVE
        CloseHandle (hProcess)
     
        Exit Sub
     
    errShell:
        msg = "Erreur " & Err.Number & " : " & Err.Description & vbLf & _
              "Programme concerné : " & Tache
        MsgBox msg, vbOKOnly + vbCritical, "Lancement de la tâche impossible"
    End Sub
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Ok je te remercie pour ta reponse.

    Ca fonctionne a merveille

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. appeler un autre programme à partir de son programme
    Par Invité dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 23/09/2009, 17h06
  2. Réponses: 1
    Dernier message: 09/03/2009, 21h40
  3. Réponses: 3
    Dernier message: 11/07/2008, 15h06
  4. Lancer un .EXE à partir d'un autre programme
    Par Pascal.Alain.B dans le forum Assembleur
    Réponses: 6
    Dernier message: 26/03/2007, 23h53
  5. Réponses: 12
    Dernier message: 06/06/2006, 18h22

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