2009-09-23 15 views
2

Mon entreprise dispose d'une grande application Windows avec un modèle objet-document: ouvrir l'application, ouvrir un fichier, apporter des modifications, sauvegarder, fermer. J'essaie de couper l'interface graphique du haut et de créer une application console qui accepte certains paramètres, ouvre un fichier, fait quelque chose d'utile, enregistre, ferme le fichier et se termine. Étant donné qu'il existe une grande quantité de code hérité, je suis obligé d'utiliser l'application de formulaires VCL et de le lancer à partir de la ligne de commande (ou du script de traitement par lots). J'ai vraiment besoin d'être capable d'imprimer sur stdout pour pouvoir écrire des messages d'état, répondre à des options comme "--version" et "-?". J'ai passé toute la matinée à faire des recherches Google sur ce sujet et je n'ai rien trouvé d'utile.Formulaire VCL d'écriture d'application sur stdout

L'application est écrite dans CodeGear C++ Builder 2007 en utilisant la VCL.

Répondre

1

Vous pouvez écrire à STDOUT dans un programme de GUI, il n'y aura généralement aucune sortie car il n'y a pas de console, sauf si elle est lancée à partir d'une console réelle. Vous pouvez également regarder les fonctions GetStdHandle() et WriteConsole() dans l'API Win32. Si GetStdHandle() renvoie un handle valide, vous pouvez y écrire. Ceci est particulièrement utile si votre application graphique est lancée par une autre application qui souhaite intercepter votre sortie STDOUT à ses propres fins.

+0

Hmm, j'ai fini par ne pas utiliser de sortie console pour le moment, mais je vais essayer quand je reviendrai dessus. Merci. –

0

Utilisez {$ APPTYPE CONSOLE} dans votre fichier de projet. Cela va allouer une console (même si votre application est toujours basée sur des formulaires). Vous pouvez également effectuer une dérivation en fonction des paramètres de ligne de commande dans le fichier projet (.DPR) (le code Delphi vous suit pour convertir en équivalent C++ Builder). Vous aurez toujours besoin de la définition APPTYPE, ou vous aurez besoin d'utiliser les fonctions de la console API Win32 pour créer votre propre console (voir MSDN Console Functions pour plus d'info):

begin 
    if ParamCount() > 0 then 
    DoWhateverTheConsoleAppWouldDoHere() 
    else 
    begin 
    Application.Initialize; 
    Application.CreateForm(TForm1, Form1); 
    Application.Run; 
    end; 
end; 
+1

Il n'y a pas d'équivalent à C++. Jonathan doit créer un projet "Console" réel, au lieu d'un projet GUI. –

+0

Ah. Merci, Rémy, pour la correction. Je suppose que la façon de le faire est avec les fonctions de la console auxquelles j'ai renvoyé Jonathan dans ma réponse. –

2

Si vous voulez juste afficher une fenêtre de console, vous pouvez appeler AllocConsole et FreeConsole. Ensuite, vous pouvez simplement appeler WriteLn ('xxx') comme vous le feriez normalement avec une application de console. Toutefois, si vous exécutez cette application à partir de la ligne de commande, elle créera toujours une nouvelle console et la sortie standard ira à la nouvelle console plutôt qu'à la console d'appel.

AllocConsole et FreeConsole sont prototypés dans l'unité Windows. APPTYPE s'applique à Delphi, pas à C++ Builder.