> Tous les forums > Forum Autres langages
 Écrire sur stdout en VB6
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
fgondard
  Posté le 31/12/2012 @ 12:30 
Aller en bas de la page 
Grand Maître astucien

Bonjour,

J'essaie d'écrire sur la console à l'intérieur d'un programme en VB qui lui même est prévu pour s'exécuter dans ce mode. Après quelques recherches sur la toile je suis arrivé au code suivant :

'-----------------
' Écriture console
'-----------------

Private Declare Function GetStdHandle Lib "Kernel32" (ByVal nStdHandle As Long) As Long
Private Declare Function WriteFile Lib "Kernel32" (ByVal hFile As Long, ByVal lpBuffer As String, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Any) As Long

' Procédure principale
'---------------------
Sub Main()
Dim msg As String
Dim nb_car As Long
Dim nb_dep As Long
Dim aff As Boolean
Const STD_OUTPUT_HANDLE = -11&
msg = "Bonjour"
aff = WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), msg, Len(msg), nb_car, nb_dep)
End Sub

Après compilation je lance ce programme en mode console et rien ne se passe ! En exécution pas à pas dans l'éditeur de VB j'ai nb_car = 0 et nb_dep = 259 mais c'est peut-être normal puisque là je ne suis plus dans la console.

Je suppose que j'ai du sauter quelques étapes mais lesquelles ?

Merci d'avance pour vos conseils.

FG

Publicité
breizhbugs
 Posté le 02/01/2013 à 13:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour,

Après une rapide recherceh google, voici un tuto:

http://www.tek-tips.com/faqs.cfm?fid=5647

un autre:

http://www.xaprb.com/blog/2005/10/14/how-to-create-a-vb6-console-program/

un troisième:

http://www.nirsoft.net/vb/console_application_visual_basic.html

Dans tous les cas, un étape importante est de passer un paramètre spécial au linker.



Modifié par breizhbugs le 02/01/2013 13:21
fgondard
 Posté le 02/01/2013 à 23:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

Merci pour cette réponse. J'avais déjà vu le premier article que tu mentionnes mais j'espérais m'en tirer sans avoir à passer par le lieur.

Je vais donc me lancer dans cette voie là mais ça risque de me prendre du temps car je ne maîtrise pas du tout ce genre d'opération en environnement micro.

FG

fgondard
 Posté le 03/01/2013 à 12:40 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

Je viens de tester et ça fonctionne. J'avais tout simplement peur de passer par la phase linkedit.

Il me reste à regarder comment ça se comporte dans les différents mode de lancement du programme où je souhaites insérer cette séquence : script, Démarrer/Exécuter et glisser/déposer.

Si je peux me permettre de te poser une autre question ? Je souhaites aussi donner la possibilité de contrôler la bonne fin via Errlevel. La seule manière que j'ai trouvée est de passer par la fonction ExitProcess mais je trouve ça un peu violent. N'y a-t-il pas un moyen de positionner ce code retour sans provoquer une fin aussi brutale ?

Merci d'avance.

FG

breizhbugs
 Posté le 03/01/2013 à 20:33 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Aucune idée, ne programme pas en Vb. Mais j'imagine que non, sinon les gens l'auraient indiqués. (as-tu essayer de changer le prototype de main pour lui faire retourner une valeur?)

Pour que ce soit le moins dégeulasse possible, fait en sorte que ce soit la dernière instruction de la fonction main tout simplement.

fgondard
 Posté le 04/01/2013 à 09:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

breizhbugs a écrit :

as-tu essayer de changer le prototype de main pour lui faire retourner une valeur?

Prototype ???

Pour que ce soit le moins dégeulasse possible, fait en sorte que ce soit la dernière instruction de la fonction main tout simplement.

C'est bien ce que j'ai fait.

Mais j'ai bien peur que tout ça ne me serve à rien car je n'ai pas trouvé le moyen d'envoyer de l'ASCII sur la console. VB ne fait pas automatiquement la transco et envoie bêtement son ANSI. Conséquence, les caractères munis de signes diacritiques apparaissent comme des hiéroglyphes.

Je n'ai pas compris grand chose aux rares articles qui traitent de ce sujet.

FG

breizhbugs
 Posté le 04/01/2013 à 13:16 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

fgondard a écrit :

breizhbugs a écrit :

as-tu essayer de changer le prototype de main pour lui faire retourner une valeur?

Prototype ???

de

Public Sub Main()

End Sub

à

Private Function Main()

Main = 1

End Function

Bon comme je ne programme pas en vb, je ne sais pas si cela marcherait...

fgondard
 Posté le 04/01/2013 à 20:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

Sous VB je dois obligatoirement avoir un Sub Main. De toute façon c'&atit surtout une question que le me posais pour ma gouverne personnelle.

J'ai quand même réussi à afficher ce que je voulais, c'est à dire des é. En ASCII é c'est 130 et 130 en ANSI c'est une virgule. Mais il y en a deux (44 et 130) et quand on saisit une virgule c'est le 44. Donc il fallait réussir à insérer le 130 dans le texte du message et pour ça le mettre sous la forme chr(130).

Avec mon exemple, pour avoir gégé sur la console il faut coder :

msg = "g" & chr(130) & g & chr(130)

Le but de tout ça était de donner la parole à mes programmes de conversion ascii/ansi qui jusqu'ici étaient totalement muets. Les nouvelles versions sont maintenant en ligne (ici).

Le seul dommage collatéral est l'apparition fugitive d'une console quand le programme n'est pas exécuté en ligne de commande. C'est la conséquence du linkedit avec la console. Ce n'est absolument pas gênant.

Merci pour ta collaboration.

FG

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
99,99 €Ecran Lenovo 24 pouces D24-20 (Full HD, VA, 75 Hz, FreeSync) à 99,99 €
Valable jusqu'au 28 Janvier

Fnac propose actuellement l'écran 24 pouces Lenovo D24-20 à 99,99 € alors qu'on le trouve ailleurs à plus de 129 €. Cet écran dispose d'une dalle Full HD (1920x1080) à bords fins, avec un temps de réponse de 5 ms et un rafraichissement de 75 Hz. Il possède des entrées VGA et HDMI. Il est compatible Freesync.  


> Voir l'offre
239 €PC Ankermann (Intel Pentium Dual Core, 8Go RAM, SSD 480Go, Win 10 + Office 2019) à 239 € livré
Valable jusqu'au 28 Janvier

Amazon fait une belle promotion sur l'ordinateur de bureau Ankermann Silent PC Work à 239 € livré. Le PC est équipé d'un processeur Intel Pentium dual core à 2.7 GHz, de 8 Go de RAM, d'un SSD de 480 Go, d'un lecteur DVD, d'un lecteur de carte mémoires et tourne sous Windows 10 Pro 64 bits. Microsoft Office 2019 Pro en français est également fourni.

Une belle machine à l'aise en bureautique et Internet. Une dizaine de machines sont disponibles à ce tarif. n'hésitez pas si vous êtes intéressé. Garantie 2 ans.


> Voir l'offre
-30 €30 € de réduction à partir de 399 € chez Cdiscount avec le code TRENTEEUROS
Valable jusqu'au 28 Janvier

Cdiscount propose actuellement 30 € de réduction à partir de 399 € d'achats. Pour profiter de l'offre, utilisez le code promo TRENTEEUROS.


> Voir l'offre

Sujets relatifs
Ecrire Bit par Bit en C++
Commande shell à écrire en C
VB6 : Ecrire un RecordSet dasn un .TXT
Ecrire sous Visual et executer sous DOS
 > Tous les forums > Forum Autres langages